Kako koristiti mrežni alat netcat

Sadržaj

U ovom vodiču govorit ćemo o a vrlo moćan mrežni alat Netcat, obično skraćeno kao nc. Ovaj se alat koristi kroz naredbeni redak i njegova je sintaksa vrlo jednostavna. Omogućit će nam pisanje i primanje podataka putem utičnica (TCP ili UDP). Ima mnoge značajke pa ga možemo koristiti na mnogo načina. Važno je znati njegov rad jer će nam omogućiti ispravljanje pogrešaka, testiranje i istraživanje na mreži.

Netcat može raditi u 2 načina:

KlijentU ovom načinu rada bit će zadužen za povezivanje sa slušateljem (koji sluša na određenoj adresi i IP -u, a to ćemo morati znati).

Poslužitelj ili slušateljPričekajte povezivanje klijenata na određenom priključku.

Mi ćemo naučiti kako Netcat ili nc radi kroz praktične primjere, što je najbolji način učenja. Za to ću koristiti Ubuntu 16.04 operativni sustav.

Prvo što ćemo vidjeti je netcat sintaksa:

 nc [opcije] [cilj] [priključak]
Netcat imate mnogo opcija, da vidimo neke:

Neke opcije netcar -a

  • -l: Kaže netcat -u da sluša.
  • -str: Za označavanje izvorne luke.
  • -s: Za označavanje adrese izvora.
  • -k: Omogućuje "beskonačne" veze slušatelju (koristi se sa -l).
  • -ili: Netcat otvara port kao UDP umjesto TCP (što je zadano).
  • -v: S ovom opcijom prikazat će nam se informacije o vezi.
  • -i: Za označavanje kašnjenja slanja i primanja. (U sekundama).
  • -4: Dopušta Netcat -u da koristi samo IPv4.
  • -6: Kao i prethodni, ali prisiljava na korištenje IPv6.

Postoji još opcija koje možemo vidjeti izvršavanjem sljedeće naredbe:

 nc -h
Ispod možete vidjeti na slici:

Počet ćemo s primjerima, najjednostavniji će ići prvo, komplicirati ih, ali samo malo, vidjet ćete da je vrlo jednostavan za korištenje.

Primjer 1
Stavite moj stroj da sluša na priključku 87:

 sudo nc -l -p 87
BilješkaIsto bi radilo i na uklanjanju -str.

Sada ćemo uspostaviti vezu s drugog terminala, dok ga pokrećem na istom stroju, koristim localhost kao adresu:

 nc localhost 87
Ako od klijenta napišemo nešto što smo upravo otvorili, vidjet ćemo to i na terminalu koji sluša, te na taj način provjeravamo radi li veza ispravno. Ali ako slušatelju napišemo prvi terminal, on stiže i do klijenta. Zatim ostavljam sliku slušatelja i drugu klijenta:

Vidimo da u ovom primjeru komuniciraju onako kako smo htjeli, idemo na drugi.

Primjer 2
Možemo natjerati poslužitelj ili slušatelja da spremi podatke koje je klijent poslao u datoteku, za to se naredba koja će se izvršiti ne razlikuje mnogo od one koja je viđena u prvom primjeru:

 sudo nc -l 87> test
Bilješkatest je naziv datoteke u koju ćete spremiti pristigle podatke.

Na strani klijenta naredba će biti ista kao i prije:

 nc localhost 87
Sljedeća slika prikazuje što se izvršava na klijentu (slušatelj sluša prije nego što se poveže, inače ne bi imao učinka):

Na strani poslužitelja možemo vidjeti da očito ništa nije primljeno, ali jedina je sigurnost da se ne prikazuje na ekranu i sprema u testnu datoteku:

Nastavimo s drugim primjerom.

Primjer 3
Provjerit ćemo je li raspon portova, da znamo jesu li otvoreni ili ne, u ovom primjeru raspon će biti 80-90. Prvo otvorimo poslužitelj na portu 80 kao što smo učinili u prvom primjeru (pa ćemo vidjeti kako radi kada je otvoren, a kada nije):

 sudo nc -l 87
Na klijentu ćemo izvršiti:
 nc -z -v localhost 80-90
Parametar -z koristi se za skeniranje, a -v Kao što smo vidjeli prije za prikaz informacija (ako ovo ne stavimo, neće se pokazati koji je port otvoren, a koji nije), tada slika klijenta:

Idemo vidjeti a primjer u UDP -u.

Primjer 4
Ovaj primjer je također jednostavan, poslušat ćemo UDP na portu 2016, i prisilit ćemo ga da bude IPv4 adresa:

 sudo nc -l -u -4 2016
A sada klijenta povezujemo:
 nc -u -4 2016
Ne dajem sliku jer će snimanje biti isto kao u primjeru 1, mijenjajući naravno dio naredbe. Prijeđimo na primjer u kojem koristimo Python kod.

Primjer 5
Kôd ćemo postaviti što je moguće jednostavnije u Python tako da sluša vezu, prima podatke i završava.

 import socket s = socket.socket () s.bind (("192.168.56.1", 1987.)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) .decode (" utf-8 ") ispis (podaci) 
Pokrenut ću ovaj kôd u sustavu Windows, a zatim ću se s Linuxa povezati s njim putem netcat -a, sljedeća slika prikazuje stranu klijenta u sustavu Linux:

A kako bi to izgledalo u sustavu Windows:

Promijenimo li kôd, možemo ga natjerati da izvrši naredbu i pošalje nam njegov sadržaj, ali možemo vratiti i ljusku koja će nam omogućiti mnoge stvari, pa prijeđimo na sljedeći primjer.

Primjer 6
U ovom primjeru ću pokrenuti a python kod Na istom Linux stroju, a ja ću se povezati s netcat -om, provjerit ćemo da li nas Shell ( / bin / bash) vraća. Ispod ostavljam Python kôd, što jednostavniji i kraći, samo za primjer.

 import socket, podproces s = socket.socket (socket.AF_INET) s.setsockopt (socket.IPPROTO_IP, socket.SO_REUSEADDR, 1) s.bind (("", 1987)) s.listen (1) conn, addr = s .accept () p = potproces.Popen ([" / bin / bash"], stdin = conn, stdout = conn, stder = conn) 
Python kôd se izvršava i vidi se sljedeće (slika prikazuje kako izgleda pri povezivanju s netcat -a):

Vidimo da sluša kad ga izvršimo, ali kad se klijent poveže, veza se zatvara, a mi imamo ljusku za nas.

Mogli bismo napraviti i kôd koji se povezuje s našim strojem, stavit ćemo ga za slušanje na određeni port, općenito postoji mnogo mogućnosti, sada morate istražiti i "igrati" se s netcat -om, što, kao što ste vidjeli, može pomoći nas u mnogim trenucima.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave