Kaip naudotis tinklo įrankiu „netcat“

Turinys

Šioje pamokoje mes kalbėsime apie a labai galingas „Netcat“ tinklo įrankis, paprastai sutrumpinamas kaip nc. Šis įrankis naudojamas per komandinę eilutę, o jo sintaksė yra labai paprasta. Tai leis mums rašyti ir gauti duomenis per lizdus (TCP arba UDP). Jis turi daug funkcijų, todėl galime jį naudoti įvairiais būdais. Svarbu žinoti jo veikimą, nes tai leis mums derinti, išbandyti ir tirti tinkle.

„Netcat“ gali veikti 2 režimais:

KlientasŠiuo režimu jis bus atsakingas už ryšį su klausytoju (kuris klausosi konkrečiu adresu ir IP ir kurį turėsime žinoti).

Serveris arba klausytojasPalaukite ryšių iš klientų tam tikrame uoste.

Mes ketiname per praktinius pavyzdžius sužinokite, kaip veikia „Netcat“ arba „nc“, kuris yra geriausias būdas mokytis. Tam aš naudosiu „Ubuntu 16.04“ operacinę sistemą.

Pirmas dalykas, kurį pamatysime, yra „netcat“ sintaksė:

 nc [parinktys] [tikslas] [prievadas]
„Netcat“ turite daug variantų, pažiūrėkime keletą:

Kai kurie „netcar“ variantai

  • -l: Liepia netcat klausytis.
  • -p: Nurodyti kilmės uostą.
  • -s: Norėdami nurodyti šaltinio adresą.
  • -k: Kad klausytojas (naudojamas su -l) leistų „begalinius“ ryšius.
  • -arba: „Netcat“ atidaro prievadą kaip UDP, o ne TCP (pagal numatytuosius nustatymus).
  • -v: Pasirinkus šią parinktį, mums bus rodoma ryšio informacija.
  • -i: Nurodo siuntimo ir gavimo vėlavimą. (Per kelias sekundes).
  • -4: Leidžia „Netcat“ naudoti tik IPv4.
  • -6: Kaip ir ankstesnis, bet verčia naudoti IPv6.

Yra daugiau parinkčių, kurias galime pamatyti vykdydami šią komandą:

 nc -h
Žemiau galite pamatyti paveikslėlyje:

Pradėsime nuo pavyzdžių, pirmiausia bus paprasčiausias, kad juos apsunkintume, tačiau tik šiek tiek pamatysite, kad juo labai lengva naudotis.

1 pavyzdys
Įdėkite mano aparatą klausytis 87 prievado:

 87
pastabąPašalinimas veiktų taip pat -p.

Dabar ketiname užmegzti ryšį iš kito terminalo, kai jį paleidžiu tame pačiame kompiuteryje, kaip adresą naudoju „localhost“:

 87
Jei ką nors iš kliento parašysime, ką tik atidarėme, tai matysime ir klausančiame terminale, ir taip patikrinsime, ar ryšys veikia tinkamai. Bet jei rašome klausytojui, pirmajam terminalui, jis pasiekia ir klientą. Toliau palieku klausytojo ir kito kliento atvaizdą:

Matome, kad jie bendrauja taip, kaip norėjome šiame pavyzdyje, eikime į kitą.

2 pavyzdys
Mes galime priversti serverį ar klausytoją išsaugoti kliento siunčiamus duomenis faile, todėl vykdoma komanda nedaug skiriasi nuo tos, kuri buvo parodyta pirmame pavyzdyje:

 sudo nc -l 87> testas
Pastabatestas yra failo, kuriame išsaugosite gautą informaciją, pavadinimas.

Kliento pusėje komanda bus tokia pati kaip ir anksčiau:

 87
Toliau pateiktame paveikslėlyje parodyta, kas vykdoma kliente (klausytojas klausosi prieš prisijungdamas, kitaip tai neturėtų jokio poveikio):

Serverio pusėje matome, kad, matyt, nieko negaunama, tačiau vienintelis tikrumas yra tas, kad jis nerodomas ekrane ir yra išsaugomas bandymo faile:

Tęskime kitą pavyzdį.

3 pavyzdys
Mes patikrinsime, ar yra prievadų diapazonas, norėdami sužinoti, ar jie yra atidaryti, ar ne, šiame pavyzdyje diapazonas bus 80–90. Pirmiausia atidarome 80 prievado serverį, kaip ir pirmame pavyzdyje (taigi pamatysime, kaip jis veikia, kai jis atidarytas, o kai ne):

 87
O klientui atliksime:
 nc -z -v localhost 80-90
Parametras -z naudojamas nuskaitymui, o -v Kaip matėme anksčiau, norėdami parodyti informaciją (jei to neįdėsime, nebus rodoma, kuris prievadas yra atidarytas, o kuris ne), tada kliento vaizdas:

Mes ketiname pamatyti a pavyzdys UDP.

4 pavyzdys
Šis pavyzdys taip pat yra paprastas, mes klausysime UDP 2016 prievado ir priversime jį būti IPv4 adresu:

 sudo nc -l -u -4 2016 m
Ir dabar mes priverčiame klientą prisijungti:
 nc -u -4 2016 m
Aš nepateikiu vaizdo, nes fiksavimas bus toks pat kaip 1 pavyzdyje, žinoma, keičiant komandos dalį. Pereikime prie pavyzdžio, kuriame naudojame „Python“ kodą.

5 pavyzdys
Į „Python“ įdėsime kuo paprastesnį kodą, kad jis klausytų ryšio, gautų duomenis ir baigtųsi.

 importuoti lizdą s = socket.socket () s.bind (("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) .decode (" utf-8 ") spausdinti (duomenys) 
Aš paleisiu šį kodą „Windows“ ir tada iš „Linux“ prisijungsiu prie jo per „netcat“, šiame paveikslėlyje parodyta kliento pusė „Linux“:

Ir kaip tai atrodytų „Windows“:

Jei ką nors modifikuojame, galime priversti jį vykdyti komandą ir atsiųsti mums jo turinį, tačiau taip pat galime grąžinti apvalkalą, kuris leis mums atlikti daug dalykų, todėl pereikime prie kito pavyzdžio.

6 pavyzdys
Šiame pavyzdyje aš paleisiu a python kodas Toje pačioje „Linux“ mašinoje ir aš prisijungsiu prie „netcat“, mes patikrinsime, ar „Shell“ ( / bin / bash) grąžina mus. Žemiau palieku kuo paprastesnį ir trumpesnį „Python“ kodą, kaip pavyzdį.

 importuoti lizdą, subprocess 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 = subprocess.Popen ([" / bin / bash"], stdin = conn, stdout = conn, stder = conn) 
Vykdomas „Python“ kodas ir matomas toks vaizdas (paveikslėlyje parodyta, kaip jis atrodo jungiantis iš „netcat“):

Mes matome, kad jis klauso, kai jį vykdome, bet kai klientas prisijungia, ryšys užsidaro ir mes turime „Shell“.

Mes taip pat galėtume sukurti kodą, kuris jungtųsi prie mūsų mašinos, kad įdėsime jį klausytis į tam tikrą prievadą, apskritai yra daug galimybių, dabar jūs turite ištirti ir „žaisti“ su „netcat“, kuris, kaip matėte, gali padėti mus daugeliu akimirkų.

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave