Netcat (nebo nc
) je nástroj příkazového řádku, který čte a zapisuje data přes síťová připojení pomocí protokolů TCP nebo UDP. Je to jeden z nejmocnějších nástrojů v arzenálu síťových a systémových administrátorů a je považován za švýcarský armádní nůž síťových nástrojů.
Netcat je multiplatformní a je k dispozici pro Linux, macOS, Windows a BSD. Netcat můžete použít k ladění a sledování síťových připojení, skenování otevřených portů, přenosu dat, jako proxy a další.
Balíček Netcat je předinstalovaný v macOS a populárních distribucích Linuxu, jako je Ubuntu, Debian nebo CentOS.
Syntaxe Netcat #
Nejzákladnější syntaxe nástroje Netcat má následující podobu:
nc [options] host port
Na Ubuntu můžete použít buď netcat
nebo nc
. Oba jsou symbolickým odkazem na openBSD verzi Netcatu.
Ve výchozím nastavení se Netcat pokusí zahájit připojení TCP k určenému hostiteli a portu. Pokud chcete vytvořit UDP spojení, použijte -u
možnost:
nc -u host port
Prohledávání portů #
Skenování portů je jedním z nejčastějších použití Netcatu. Můžete skenovat jeden port nebo rozsah portů.
Například pro vyhledání otevřených portů v rozsahu 20-80 byste použili následující příkaz:
nc -z -v 10.10.8.8 20-80
-z
volba řekne nc
pouze vyhledávat otevřené porty, aniž by se na ně posílala jakákoli data a -v
možnost poskytnout podrobnější informace.
Výstup bude vypadat nějak takto:
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Pokud chcete tisknout pouze řádky s otevřenými porty, můžete výsledky filtrovat pomocí grep
příkaz.
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Můžete také použít Netcat k nalezení serverového softwaru a jeho verze. Pokud například odešlete příkaz „EXIT“ serveru na výchozí port SSH 22:
echo "EXIT" | nc 10.10.8.8 22
Výstup bude vypadat nějak takto:
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.
Chcete-li vyhledat porty UDP, jednoduše přidejte -u
možnost k příkazu, jak je uvedeno níže:
nc -z -v -u 10.10.8.8 20-80
Nmapis je obvykle lepší nástroj než Netcat pro komplexní skenování portů.
Odesílání souborů přes Netcat #
Netcat lze použít k přenosu dat z jednoho hostitele na druhého vytvořením základního modelu klient/server.
Funguje to tak, že Netcat nastavíte tak, aby naslouchal na konkrétním portu (pomocí -l
option) na přijímajícím hostiteli a poté navázáním běžného TCP spojení z druhého hostitele a odesláním souboru přes něj.
Při příjmu spusťte následující příkaz, který otevře port 5555 pro příchozí připojení a přesměruje výstup do souboru:
nc -l 5555 > file_name
Z odesílajícího hostitele se připojte k přijímajícímu hostiteli a odešlete soubor:
nc receiving.host.com 5555 < file_name
K přenosu adresáře můžete použít tar
archivovat adresář na zdrojovém hostiteli a extrahovat archiv na cílovém hostiteli.
Na přijímajícím hostiteli nastavte nástroj Netcat tak, aby naslouchal příchozímu připojení na portu 5555. Příchozí data jsou směrována do tar
příkaz, který rozbalí archiv:
nc -l 5555 | tar xzvf -
Na odesílajícím hostiteli zabalte adresář a odešlete data připojením k naslouchajícímu nc
proces na přijímajícím hostiteli:
tar czvf - /path/to/dir | nc receiving.host.com 5555
Průběh přenosu můžete sledovat na obou koncích. Po dokončení zadejte CTRL+C
pro ukončení připojení.
Vytvoření serveru pro jednoduchý chat #
Postup pro vytvoření online chatu mezi dvěma nebo více hostiteli je stejný jako při přenosu souborů.
Na prvním hostiteli spusťte proces Netcat, aby naslouchal na portu 5555:
nc -l 5555
Z druhého hostitele spusťte následující příkaz pro připojení k naslouchajícímu portu:
nc first.host.com 5555
Nyní, když napíšete zprávu a stisknete ENTER
bude zobrazen na obou hostitelích.
Chcete-li připojení ukončit, zadejte CTRL+C
.
Provedení požadavku HTTP #
I když existují mnohem lepší nástroje pro požadavky HTTP, jako je curl
, můžete také použít Netcat k odesílání různých požadavků na vzdálené servery.
Chcete-li například získat manuálovou stránku Netcatu z webu OpenBSD, zadejte:
printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80
Úplná odpověď, včetně HTTP hlaviček a HTML kódu, bude vytištěna v terminálu.
Závěr č.
V tomto tutoriálu jste se naučili používat nástroj Netcat k navazování a testování připojení TCP a UDP.
Pro více informací navštivte manuálovou stránku Netcat a přečtěte si o všech dalších výkonných možnostech příkazu Netcat.
Pokud máte nějaké dotazy nebo připomínky, zanechte prosím níže komentář.