Копиране на файлове, четене на електронна поща, сканиране на портове, стартиране на уеб-сървър и всичко това в мрежата. NetCat се справя с всички тези задачи, но само в мрежата – за сметка на това върши работата си безупречно. В тази статия ще ви разкажа малко повече за мрежовия инструмент netcat и ще демонстрирам някои от възможностите му с примери. За целта ще разгледаме всяка задача като отделна точка.
Прехвърляне на файлове
Да приемем, че искате да копирате файл с името test.txt от една машина с име в мрежата john върху друга машина с име в мрежата smith. За целта трябва да стартирате програмата netcat на машината smith като сървър с опциите -l за „listen“ (на български: слушане) и -p 6000, където параметъра -p определя порта, на който сървъра да „слуша“ – в случая 6000. Едно пренасочване за писане се грижи за това, че netcat ще запише входящите данни в определен от нас файл.
На разположение в терминала имаме командата netcat и кратката й форма nc. За стартиране ще използваме следната команда:
smith:~$ nc -l -p 6000 > got_test.txt
На компютъра john е достатъчно да зададем параметрите smith, 6000 и < test.txt за да подадем данните към Netcat, който от своя страна да ги предаде на стартирания под smith, Netcat:
john:~$ nc smith 6000 < test.txt
След като на john сте стартирали програмата трябва да я прекратите с [Ctrl]+[C]. Стартирания на smith Netcat ще се изключи сам след като запише файла got_test.txt. По подобен начин се процедира когато искате да прехвърлите цялото съдържание на директория между два компютъра:
smith:~$ nc -l -p 6000 | tar x john:~$ tar cf - * | nc smith 6000
Това, което се случва е всъщност свързването на две команди на всеки компютър. На компютъра john създавате tar-архив със съдържанието на текущата директория, и го изпращате на smith, при получаването smith разархивира полученото в текущата директория
Комуникация
Какво ще се случи обаче ако и на двата компютъра стартирате програмата без поток от определени данни? В такъв случаи ще разполагат с един малък чат:
>smith:~$ nc -l -p 2000 john:~$ nc smith -p 2000
Всичко, което потребителите на smith или john въвежда ще излиза на монитора на отсрещния потребител. При това с netcat можете да работите интерактивно: като това да проверите броя и размера на писмата в пощенската си кутия стига да разполагате с адреса ан POP3 сървъра:
С ключовите думи user и pass се идентифицирате пред съответния сървър. Командата list кара POP сървъра да покаже размера на всичките писма намиращи се в пощенската ви кутия. Командата quit прекратява връзката. По подобен начин можете да се свързвате и с SMTP, NNMP и дори FTP сървъри. Нуджно е само да преврите командите, които поддържа съответния протокол.
Сканиране на портове
Често като потребител не знаете кой компютър какви услуги (services) предлага във вашата мрежа. За тази цел Netcat предлага своите услуги и като инструмент за сканиране на портове:
smith~$ nc -vz localhost 1-1024 localhost [127.0.0.1] 631 (ipp) open
Параметъра -v („verbose“) се грижи за показването на пълния изход от командата, опцията -z („zero I/O mode“) кара netcat да сканира определени портове. Както виждате от горепосочения пример, на компютъра smith на порт 631 най-вероятно е включен принтер-демон. Вместо да задавате портове или групи от портове netcat приема като параметри и конкретни услуги, което е полезно ако търсите дали определен компютър от вашата мрежа поддържа ftp услуга.
Уеб заявки
Освен поддръжката на FTP услуги, с Nmap можете да работите и с уеб сървъри. Един ред е достатъчен, за да свалите съдържанието на страница от даден сайт. Да вземем за пример немското списание www.linux-user.de което има уеб сървър на порт 80:
$ echo -e "GET / HTTP/1.1\r\n" | nc www.linux-user.de 80 > test.html
Първата команда, която пращаме към nc, echo -e „GET / HTTP/1.1\r\n“ представлява заявка („Request“), която по принцип се изпраща от всеки уеб браузър. С GET заявяваме и коя страница от уеб сървъра искаме да прегледаме – в случая това е / (root).
По-рано, обаче, научихме, че Netcat може да работи и като сървър. Така, че можем да разширим примера като разширим горната команда по следния начин:
$ echo -e "Get / HTTP/1.1\r\n" | nc www.linux-user.de 80 > test.html | nc -l -p 8080 -q 1
Както се досещате параметрите -l -p 8080 карат Netcat да работи като сървър на порт 8080. Нов е параметъра -q 1, който спира работата на netcat една секунда след като се достигне края на файла. По този начин netcat уеб сървъра приема от първата nc инстанция страницата test.html и позволява тя да бъде прегледана на локалната машина на порт 8080 (http://localhost:8080). Изхода, който ще видите в терминала е заявката, която Mozilla прави към netcat, за да види страницата test.html:
GET / HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8pre) Gecko/20100120 Ubuntu/9.10 (karmic) Shiretoko/3.5.8pre Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: CAKEPHP=f2d80f0e9d891cb155f0a6fe1159a152 Cache-Control: max-age=0
Разбира се с малко основни знания в шел програмирането netcat може да бъде накаран да работи по-дълго време като уеб сървър – за целта трябва да вмъкнете netcat в един безкраен while цикъл:
while true; do; nc -l -p 8080 -q 1 < test.html; done
По този начин (изискват се root права) можете да имплементирате на привилегировани портове от 1 до 1024 така наречените Honeypots, на български „бурканче с мед“. Така се наричат услуги, които не съществуват, а техните портове реагират само на заявки, за да се проследят потенциални нападатели или както ще покажа в следния пример да ядосвате кварталните хакери при опит за връзка към вас през telnet:
smith:~# echo " You are an IDIOT" | nc -vv -l -p 23 -q 1 smith:~$ telnet localhost 23 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. You are an IDIOT Connection closed by foreign host.
Използвайте внимателно!
Колкото и удобен и мощен да е netcat в изпълнението на своите услуги, трябва да се внимава много при използването му. При необмислено използване – това може да се окаже доста опасно за самите вас. Параметърът, който е отговорен за потенциални проблеми в сигурността е -e. Означава „execute“ („изпълни“). Всичко което стои след -e, Netcat стартира без замисляне и нужда от потвърждение – дори и един shell:
smith:~$ nc -v -l -p 6000 -e /bin/bash
По този начин е достатъчно от компютъра john да зададете към Netcat параметрите smith и порта 6000 и по този начин без никакво идентифициране john ще получи достъп до вашия shell. Не е нужно много въображение, за да си представите какво може да се случи с компютъра smith, ако работи без защитна стена и е свързан към интернет.
Един по-безопасен пример:
Тъй като мрежовата котка (NetCat) се храни с всякакви данни, които и подадете можете да я използвате и за stream на файлове през мрежата:
smith:~$ nc -l -p 8765 -q 1 | super_dupper.mp3 john:~$ nc smith 8765 | mplayer -
Това става безпроблемно само с медиен плеър инсталиран на john, който може да чете данните директно от командния ред – в този пример Mplayer се справя перфектно с тази задача.
Малко повече
Показаните до тук примери покриват само една малка част от възможностите, които Netcat предлага. Освен горе-споменатите точки с този инструмент можете да пренасочвате портове, да протоколирате пренасянето на данни във вашата мрежа или да тествате стабилността на услуги.
По-детайлно разгледани Netcat-скриптове можете да намерите на вашата система на места като /usr/share/doc/netcat/examples или /usr/share/doc/netcat-traditional/examples. Страницата с упътване за ползване можете да видите с командата man nc съответно man netcat.
Заключение
Netcat със лесните за използване и огромния брой от услуги се доказва като един незаменим помощник/инструмент при изпълняването на различни задачи в мрежата. В случай, че не ви достигат опциите, които предлага съществуват и разширената версия Socat, а за кодирано предаване Cryptcat. И двете приложения наподобяват по начина си на използване на Netcat, но залагат на различни основни точки при използването им.




2 Коментара
Има грешка в кодирането на статията. На места се срещат gt; и lt; вместо знаци за по-голямо и по-малко.
Проблема ми е известен – получава се от самия Wordpress, който заменя нещата, където не трябва. Явно отново се е появил след последното обновяване.
#Редакция:
Проблема би трябвало да е остранен. Тъпия wordpress просто решава, че трябва да си прилага глупавото форматиране върху всичко без значение, че е в pre тагове. В момента това трябва да е изключено с wp-typography