Bevezetés
Az egyik legnagyobb előnye a Linux használatának a rengeteg hasznos segédprogram, amit biztosít. A programon belüli funkciók általában elegendőek a legtöbb programozó számára a munkájuk elvégzéséhez. Ez azt jelenti, hogy az esetek többségében nem lesz szükséged külső programok és szoftverek letöltésére. A beépített eszközök elegendő funkciót biztosítanak majd. Ezen hasznos funkciók közé tartozik a netcat segédprogram is.
Ha a hálózati eszközök világáról van szó, a netcat szinte egy túlméretezett fegyver. Ez egy hihetetlenül sokoldalú parancs, amelyet számos célra használhatsz. Például használhatod ezt az egyetlen eszközt a rendszerkapcsolatokon keresztüli monitorozásra, tesztelésre, valamint mindenféle fájl és adat átvitelére. Ebben az útmutatóban megvizsgáljuk, hogyan hajthatod végre mindezen műveleteket egy VPS segítségével, a netcat használatával.
A Netcat megtalálása
A Netcat általában minden modern Linux disztribúción elérhető. Ez azt jelenti, hogy nagy valószínűséggel már rendelkezel vele, és nem kell külön telepítened. Oktatóanyagunkban az Ubuntu 12.04 VPS-t fogjuk használni. A saját Ubuntu szerveredet is telepítheted az útmutatónkat követve. Az Ubuntu általában a netcat segédprogram BSD változatával érkezik. Tartsd szem előtt, hogy ha másik verziód van, az kissé eltérően működhet.
Az alapvető szintaxis áttekintése
Kezdésként megismerkedünk a netcat segédprogramban működő általános szintaxissal. A netcat-et egy TCP-kapcsolat indításával működtetheted. A kapcsolatot egy távoli gazdagép felé kell kezdeményezni. Íme a netcat alapvető szintaxisa:
|
1 |
netcat [opciók] host port |
Ez a parancs megpróbál egy TCP-kapcsolatot indítani egy távoli gazdagép felé. Hogy melyik gazdagéphez csatlakozik, az a parancsban megadott portszámtól függ. A kapcsolat titkosítatlan lesz. Mint látható, ez a parancs hasonlóan működik, mint a telnet parancs.
Másrészt kezdeményezhetsz egy UDP-kapcsolatot is. Ha TCP helyett UDP csomagot szeretnél küldeni, a -u opciót kell használnod. Ez így nézne ki:
|
1 |
netcat -u host port |
Ha szeretnéd, megadhatsz egy porttartományt is. Ehhez egy kötőjelet kell tenned az első és az utolsó port közé. Íme egy példa:
|
1 |
netcat host startport-endport |
Ehhez további jelzőket (flag) is hozzáadhatsz. Egy másik fontos dolog, hogy a netcat és az nc parancsokat felcserélhetően használhatod. Mindkettő ugyanazt a parancsot indítja el, vagyis egymás álnevei (alias).
A Netcat használata portszkennelésre
Kezdésként vizsgáljuk meg a netcat egyik leggyakoribb felhasználási módját. Megnézzük, hogyan használhatjuk portszkennerként. A legtöbb helyzetben jobban jársz egy olyan eszköz használatával, mint az nmap. Ha azonban csak egyszerű portszkennelést kell végezned, a netcat hasznos lehet. Segítségével könnyedén azonosíthatod a nyitott portokat.
Ahhoz, hogy a netcat-et portszkennerként használd, meg kell adnod a portok tartományát. Ezt a -z opcióval teheted meg. Így a rendszer a kapcsolat megkísérlése helyett a porttartományt fogja pásztázni. Tegyük fel, hogy az 1-es porttól az 1000-es portig szeretnénk szkennelni:
|
1 |
netcat -z -v domain.com 1-1000 |
A -z parancs mellett a -v opciót is használtuk. Ez utóbbi lehetővé teszi, hogy több információt kapjunk a parancstól. Lehetővé teszi, hogy részletesebb (verbose) kimenetet kapjunk.
Cserébe egy ehhez hasonló kimenetet fogsz kapni:

A kimenet sok információt mutat minden egyes portról. Láthatod az egyes portok kapcsolati állapotát. Másrészt a domain név helyett használhatod az IP-címet is, ha ismered azt. Ez sokkal gyorsabbá teszi a folyamatot. Íme egy példa:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
A -n jelzőt használtuk annak jelzésére, hogy a rendszernek nem szükséges DNS-t használnia az IP-cím feloldásához.
A visszatérési üzenetek általában a szabványos hiba kimenetre (standard error) küldődnek. Az eredmények gyorsabb kiszűrése érdekében átirányíthatod őket a szabványos kimenetre (standard out). Ehhez a 2>&1 bash szintaxist fogjuk használni. Ezt követően a grep segítségével szűrjük ki az eredményeket. Alkalmazzuk ezt a példánkra:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep sikerült |
A kimenet ehhez hasonlóan fog kinézni:
![]()
A kimenet azt mutatja, hogy a megadott tartományban csak a 22-es port van nyitva a kapcsolódáshoz. A 22-es port történetesen a hagyományos SSH-port.
Kommunikáció Netcaten keresztül: Hogyan működik?
A következőkben megnézzük, hogyan használhatja a netcatot TCP- és UDP-csomagok küldésére. Nemcsak erre képes, hanem különféle portokon is tud csomagokat fogadni. Ennek a képességnek köszönhetően két netcat példány segítségével kliens-szerver kapcsolatot hozhat létre. Kezdetben meghatározza a klienst és a szervert. A kezdeti konfiguráció után mindkét kliens küldhet és fogadhat csomagokat mindkét irányban.
Természetesen az egyik rendszeren konfigurálnia kell a netcatot, hogy figyelje a kapcsolatokat egy adott porton. Ehhez a -l paramétert kell használnia. Ezzel a következőképpen választhatja ki a kívánt portot:
|
1 |
netcat -l 4444 |
Most a TCP ezen a gépen a 4444-es porton fogja várni a kapcsolatokat. Fontos megjegyezni, hogy ha Ön nem root vagy normál felhasználó, nem fog tudni hozzáférni az 1000 alatti portokhoz.
Ezután konfigurálnia kell egy második gépet a kapcsolat létrehozásához. Ugyanazt a portszámot fogja használni, és megad egy konkrét domain nevet a következőképpen:
|
1 |
netcat domain.com 4444 |
Ennek a parancsnak a futtatása nem ad semmilyen kimenetet. Azonban létrehozza a kapcsolatot. Ez azt jelenti, hogy elkezdhet üzeneteket küldeni az egyik szerverről a másikra. Ehhez mindössze annyit kell tennie, hogy beírja az üzenetet, majd megnyomja az ENTER billentyűt. Az üzenet mindkét képernyőn megjelenik.
Ha végzett, a CTRL+D billentyűkombináció megnyomásával bezárhatja a TCP-kapcsolatot.
Küldhetők fájlok a Netcat használatával?
A következőkben megmutatjuk, hogyan küldhet fájlokat a netcaten keresztül. TCP-kapcsolattal üzeneteket és más típusú adatokat is küldhet. Kezdésként ki kell választania egy gépet, amely fogadja a kapcsolatokat. Ahelyett azonban, hogy beírnánk az információkat a parancsba, egy fájlba helyezzük el azokat, így:
|
1 |
netcat -l 4444 > received_file |
A másik gépen létre kell hoznia egy új szöveges fájlt. Íme a használandó parancs:
|
1 |
echo "Szia, ez egy fájl" > original_file |
A fájl átviteléhez bemenetként fogja használni a kapcsolat számára a figyelő számítógépen:
|
1 |
netcat domain.com 4444 < original_file |
A másik számítógépen megjelenik egy új, „received_file” nevű fájl. Ez tartalmazni fogja az összes beírt információt:
|
1 |
cat received_file |
Ezt a segédprogramot fájlátviteli programmá is alakíthatja. Tegyük fel, hogy egy könyvtár tartalmát szeretné átvinni. Ezt úgy fogjuk megtenni, hogy létrehozunk egy névtelen tarballt, amelyet átviszünk a rendszerre, és kicsomagolunk a távoli könyvtárba. A másik gépen fel kell készülnünk a fájl fogadására. Tudjuk, hogy ki kell csomagolnunk és ki kell bontanunk. Ehhez adja ki ezt a parancsot:
|
1 |
netcat -l 4444 | tar xzvf - |
A kötőjel azt jelzi, hogy a tar a szabványos bemeneten fog működni. Ez a kezdeti szerveren lévő netcat-től származik, amikor létrehoztuk a kezdeti kapcsolatot.
Végül a teljes könyvtár tartalmát egy tarballba helyezhetjük, és a netcaten keresztül elküldhetjük így:
|
1 |
tar -czf - * | netcat domain.com 4444 |
A tar parancsban lévő kötőjel azt mutatja, hogy arra utasítjuk a rendszert, hogy archiválja (tar) és tömörítse (zip) a könyvtár tartalmát. Arra is utasítja, hogy az eredményt a szabványos kimenetre írja. A fájl a TCP-kapcsolaton keresztül jut el a másik oldalra. A fogadó szerver kicsomagolja és elmenti az aktuális távoli könyvtárba.
Ugyanígy más típusú adatokat is átvihet a netcaten keresztül. Sokan használják a dd parancsot lemezképek készítésére és átvitelére. Az adatok és fájlok átvitelének egy másik módjáért tekintse meg a útmutatónkat, amely bemutatja, hogyan szavatolható a biztonság az SFTP-vel történő fájlátvitel során.
A Netcat használata webszerverként
A netcat másik hasznos funkciója, hogy segítségével tesztelheti az oldalait. Tegyük fel, hogy egy szervert használunk egy ilyen HTML-fájl létrehozásához:
|
1 |
nano index.html |
Ez az a HTML-kód, amelyet a fájl tartalmaz:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>Tesztoldal</title> </head> <body> <h1>1. szintű címsor</h1> <h2>Alcímsor</h2> <p>Normál szöveg itt</p> </body> </html> |
Írja be ezt a fájlba, majd mentse el és zárja be. Általában a 80-as port az alapértelmezett webes port. Normál, nem root felhasználóként a 8888-as portot fogjuk választani. Feltételezve, hogy egyszer szeretné kiszolgálni és ellenőrizni az oldalt, a következő parancsot kell használnia:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
A fájl tartalmának megjelenítéséhez nyissa meg a böngészőjét. Látogasson el a következő címre:
|
1 |
http://server_IP:8888 |
Láthatja majd az oldalt, amelyet a HTML-fájllal kódolt:

Miután megkapta az oldalt, a netcat kapcsolat bezárul. Ez azt jelenti, hogy az oldal frissítésekor a tartalom helyett hibaüzenetet fog kapni. Ez azért van, mert úgy konfiguráltuk, hogy csak egyszer szolgálja ki az oldalt. Ha továbbra is szeretné fogadni a kapcsolatokat, hogy az oldalt a végtelenségig láthassa, egy másik kódot kell használnia:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
Itt az utolsó parancsot egy végtelen ciklusba ágyaztuk. Ha le akarja állítani a ciklust, mindössze a CTRL-C billentyűkombinációt kell leütnie. Most már az első kapcsolat lezárása után is folytathatja az oldal és annak megjelenítésének megtekintését. Azonban ez a maximális funkcionalitás, amit a netcat segédprogram webszerverként való használatából kihozhat. Ne próbálja meg valódi webhelyek kiszolgálására használni, mivel nem nyújt semmilyen biztonságot. Ehelyett tekintse meg az alábbi oktatóanyagainkat: hogyan telepíthet webszerver-szoftvereket, például Nginx-et vagy Apache.
Összegzés
Ebben az oktatóanyagban bemutattuk a netcat segédprogramot, és feltártuk sokoldalúságát mint eszközt az Ubuntu rendszeren. Ahogy a fenti szakaszokban bemutattuk, használhatja kommunikációra, adatátvitelre és oldalkiszolgálási célokra. Tökéletesen működik a szerverek közötti gyors interakciókhoz TCP/UDP kapcsolatokon keresztül. Ez egy nagyon hasznos funkció számos alapszintű funkcióhoz és diagnosztikához.
Kellemes számítógéphasználatot!
Hozzászólások
Még nincsenek hozzászólások. Legyen Ön az első.