<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BulTux &#187; мрежи</title>
	<atom:link href="http://www.bultux.org/tag/%d0%bc%d1%80%d0%b5%d0%b6%d0%b8/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bultux.org</link>
	<description>Български блог посветен на свободния софтуер и новото от Linux света</description>
	<lastBuildDate>Sat, 03 Dec 2011 08:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Netcat &#8211; швейцарското ножче за мрежи</title>
		<link>http://www.bultux.org/tutorials/netcat-shweicarsko-nojche-za-mreji</link>
		<comments>http://www.bultux.org/tutorials/netcat-shweicarsko-nojche-za-mreji#comments</comments>
		<pubDate>Fri, 22 Jan 2010 12:11:52 +0000</pubDate>
		<dc:creator>Владимир Колев</dc:creator>
				<category><![CDATA[Уроци]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[как да]]></category>
		<category><![CDATA[мрежи]]></category>
		<category><![CDATA[сървъри]]></category>
		<category><![CDATA[чат]]></category>

		<guid isPermaLink="false">http://www.bultux.org/?p=199</guid>
		<description><![CDATA[<img src="http://bultux.org/wp-content/plugins/category-icons/cats/tuts.png" width="22" height="22" alt="" title="Уроци" /><br/>Копиране на файлове, четене на електронна поща, сканиране на портове, стартиране на уеб-сървър и всичко това в мрежата. NetCat се справя с всички тези задачи, но само в мрежата &#8211; за сметка на това върши работата си безупречно. В тази статия ще ви разкажа малко повече за мрежовия инструмент netcat и ще демонстрирам някои от [...]]]></description>
			<content:encoded><![CDATA[<img src="http://bultux.org/wp-content/plugins/category-icons/cats/tuts.png" width="22" height="22" alt="" title="Уроци" /><br/><p style="text-align: justify;"><img class="alignright size-full wp-image-200" title="swiss-army-knife" src="http://www.bultux.org/wp-content/uploads/2010/01/swiss-army-knife.png" alt="" width="326" height="251" />Копиране на файлове, четене на електронна поща, сканиране на портове, стартиране на уеб-сървър и всичко това в мрежата. <a href="http://netcat.sourceforge.net/" target="_blank">NetCat</a> се справя с всички тези задачи, но само в мрежата &#8211; за сметка на това върши работата си безупречно. В тази статия ще ви разкажа малко повече за мрежовия инструмент netcat и ще демонстрирам някои от възможностите му с примери. За целта ще разгледаме всяка задача като отделна точка.</p>
<h3>Прехвърляне на файлове</h3>
<p style="text-align: justify;">Да приемем, че искате да копирате файл с името <strong>test.txt</strong> от една машина с име в мрежата john върху друга машина с име в мрежата smith. За целта трябва да стартирате програмата netcat на машината <em>smith</em> като сървър с опциите <strong>-l</strong> за &#8220;listen&#8221; (на български: слушане) и <strong>-p 6000</strong>, където параметъра <strong>-p</strong> определя порта, на който сървъра да &#8220;слуша&#8221; &#8211; в случая 6000. Едно пренасочване за писане се грижи за това, че netcat ще запише входящите данни в определен от нас файл.<br />
<span id="more-199"></span>На разположение в терминала имаме командата netcat и кратката й форма <strong>nc</strong>. За стартиране ще използваме следната команда:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">smith:~$ </span>nc <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">6000</span> <span class="sy0">&gt;</span> got_test.txt</pre></div></div>


<p>На компютъра <em>john</em> е достатъчно да зададем параметрите <strong><em>smith</em></strong>, <strong><em>6000</em></strong> и <em><strong>&lt; test.txt</strong></em> за да подадем данните към Netcat, който от своя страна да ги предаде на стартирания под <em>smith</em>, Netcat:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">john:~$ </span>nc smith <span class="nu0">6000</span> <span class="sy0">&lt;</span> test.txt</pre></div></div>


<p style="text-align: justify;">След като на john сте стартирали програмата трябва да я прекратите с [Ctrl]+[C]. Стартирания на <em>smith</em> Netcat ще се изключи сам след като запише файла <em><strong>got_test.txt</strong></em>. По подобен начин се процедира когато искате да прехвърлите цялото съдържание на директория между два компютъра:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">smith:~$ </span>nc <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">6000</span> <span class="sy0">|</span> <span class="kw2">tar</span> x
<span class="co4">john:~$ </span><span class="kw2">tar</span> cf - <span class="sy0">*</span> <span class="sy0">|</span> nc smith <span class="nu0">6000</span></pre></div></div>


<p style="text-align: justify;">Това, което се случва е всъщност свързването на две команди на всеки компютър. На компютъра <em>john</em> създавате tar-архив със съдържанието на текущата директория, и го изпращате на <em>smith</em>, при получаването <em>smith</em> разархивира полученото в текущата директория</p>
<p><div class="note"><div class="notewarning">Aко го правите с цел тест &#8211; опитвайте с по-малки съдържания и избягвайте да изпълнявате командата от домашната си директория.</div></div></p>
<h3>Комуникация</h3>
<p style="text-align: justify;">Какво ще се случи обаче ако и на двата компютъра стартирате програмата без поток от определени данни? В такъв случаи ще разполагат с един малък чат:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="sy0">&gt;</span>smith:~$ nc <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">2000</span>
<span class="co4">john:~$ </span>nc smith <span class="re5">-p</span> <span class="nu0">2000</span></pre></div></div>


<p style="text-align: justify;">Всичко, което потребителите на <em>smith</em> или <em>john</em> въвежда ще излиза на монитора на отсрещния потребител. При това с netcat можете да работите интерактивно: като това да проверите броя и размера на писмата в пощенската си кутия стига да разполагате с адреса ан POP3 сървъра:</p>
<p style="text-align: justify;">С ключовите думи user и pass се идентифицирате пред съответния сървър. Командата list кара POP сървъра да покаже размера на всичките писма намиращи се в пощенската ви кутия. Командата quit прекратява връзката. По подобен начин можете да се свързвате и с SMTP, NNMP и дори FTP сървъри. Нуджно е само да преврите командите, които поддържа съответния протокол.</p>
<h3>Сканиране на портове</h3>
<p style="text-align: justify;">Често като потребител не знаете кой компютър какви услуги (services) предлага във вашата мрежа. За тази цел Netcat предлага своите услуги и като инструмент за сканиране на портове:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1">smith~$ nc <span class="re5">-vz</span> localhost <span class="nu0">1</span>-<span class="nu0">1024</span>
localhost <span class="br0">&#91;</span>127.0.0.1<span class="br0">&#93;</span> <span class="nu0">631</span> <span class="br0">&#40;</span>ipp<span class="br0">&#41;</span> open</pre></div></div>


<p style="text-align: justify;">Параметъра <strong><em>-v</em></strong> (&#8220;verbose&#8221;) се грижи за показването на пълния изход от командата, опцията <strong><em>-z</em></strong> (&#8220;zero I/O mode&#8221;) кара netcat да сканира определени портове. Както виждате от горепосочения пример, на компютъра smith на порт 631 най-вероятно е включен принтер-демон. Вместо да задавате портове или групи от портове netcat приема като параметри и конкретни услуги, което е полезно ако търсите дали определен компютър от вашата мрежа поддържа ftp услуга.</p>
<h3>Уеб заявки</h3>
<p style="text-align: justify;">Освен поддръжката на FTP услуги, с Nmap можете да работите и с уеб сървъри. Един ред е достатъчен, за да свалите съдържанието на страница от даден сайт. Да вземем за пример немското списание <a href="http://www.linux-user.de" target="_blank">www.linux-user.de</a> което има уеб сървър на порт 80:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">$ </span><span class="kw3">echo</span> <span class="re5">-e</span> <span class="st0">&quot;GET / HTTP/1.1<span class="es1">\r</span><span class="es1">\n</span>&quot;</span> <span class="sy0">|</span> nc www.linux-user.de <span class="nu0">80</span> <span class="sy0">&gt;</span> test.html</pre></div></div>


<p style="text-align: justify;">Първата команда, която пращаме към nc, <em>echo -e &#8220;GET / HTTP/1.1\r\n&#8221;</em> представлява заявка (&#8220;Request&#8221;), която по принцип се изпраща от всеки уеб браузър. С <em>GET</em> заявяваме и коя страница от уеб сървъра искаме да прегледаме &#8211; в случая това е <strong>/</strong> (root).<br />
По-рано, обаче, научихме, че Netcat може да работи и като сървър. Така, че можем да разширим примера като разширим горната команда по следния начин:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">$ </span><span class="kw3">echo</span> <span class="re5">-e</span> <span class="st0">&quot;Get / HTTP/1.1<span class="es1">\r</span><span class="es1">\n</span>&quot;</span> <span class="sy0">|</span> nc www.linux-user.de <span class="nu0">80</span> <span class="sy0">&gt;</span> test.html <span class="sy0">|</span> nc <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">8080</span> <span class="re5">-q</span> <span class="nu0">1</span></pre></div></div>


<p style="text-align: justify;">Както се досещате параметрите<strong> -l -p 8080</strong> карат Netcat да работи като сървър на порт 8080. Нов е параметъра <strong><em>-q 1</em></strong>, който спира работата на netcat една секунда след като се достигне края на файла. По този начин netcat уеб сървъра приема от първата nc инстанция страницата <strong>test.html</strong> и позволява тя да бъде прегледана на локалната машина на порт 8080 (<em>http://localhost:8080</em>). Изхода, който ще видите в терминала е заявката, която Mozilla прави към netcat, за да види страницата test.html:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1">GET <span class="sy0">/</span> HTTP<span class="sy0">/</span><span class="nu0">1.1</span>
Host: localhost:<span class="nu0">8080</span>
User-Agent: Mozilla<span class="sy0">/</span><span class="nu0">5.0</span> <span class="br0">&#40;</span>X11; U; Linux i686; en-US; rv:1.9.1.8pre<span class="br0">&#41;</span> Gecko<span class="sy0">/</span><span class="nu0">20100120</span> Ubuntu<span class="sy0">/</span><span class="nu0">9.10</span> <span class="br0">&#40;</span>karmic<span class="br0">&#41;</span> Shiretoko<span class="sy0">/</span>3.5.8pre
Accept: text<span class="sy0">/</span>html,application<span class="sy0">/</span>xhtml+xml,application<span class="sy0">/</span>xml;<span class="re2">q</span>=<span class="nu0">0.9</span>,<span class="sy0">*/*</span>;<span class="re2">q</span>=<span class="nu0">0.8</span>
Accept-Language: en-us,en;<span class="re2">q</span>=<span class="nu0">0.5</span>
Accept-Encoding: <span class="kw2">gzip</span>,deflate
Accept-Charset: ISO-<span class="nu0">8859</span>-<span class="nu0">1</span>,utf-<span class="nu0">8</span>;<span class="re2">q</span>=<span class="nu0">0.7</span>,<span class="sy0">*</span>;<span class="re2">q</span>=<span class="nu0">0.7</span>
Keep-Alive: <span class="nu0">300</span>
Connection: keep-alive
Cookie: <span class="re2">CAKEPHP</span>=f2d80f0e9d891cb155f0a6fe1159a152
Cache-Control: max-age=<span class="nu0">0</span></pre></div></div>


<p style="text-align: justify;">Разбира се с малко основни знания в шел програмирането netcat може да бъде накаран да работи по-дълго време като уеб сървър &#8211; за целта трябва да вмъкнете netcat в един безкраен <em><strong>while</strong></em> цикъл:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="kw1">while</span> <span class="kw2">true</span>; <span class="kw1">do</span>; nc <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">8080</span> <span class="re5">-q</span> <span class="nu0">1</span> <span class="sy0">&lt;</span> test.html; <span class="kw1">done</span></pre></div></div>


<p style="text-align: justify;">По този начин (изискват се root права) можете да имплементирате на привилегировани портове от 1 до 1024 така наречените <a href="http://en.wikipedia.org/wiki/Honeypot_%28computing%29" target="_blank">Honeypots</a>, на български &#8220;бурканче с мед&#8221;. Така се наричат услуги, които не съществуват, а техните портове реагират само на заявки, за да се проследят потенциални нападатели или както ще покажа в следния пример да ядосвате кварталните хакери при опит за връзка към вас през <a href="http://en.wikipedia.org/wiki/Telnet" target="_blank">telnet</a>:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">smith:~# </span><span class="kw3">echo</span> <span class="st0">&quot; You are an IDIOT&quot;</span> <span class="sy0">|</span> nc <span class="re5">-vv</span> <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">23</span> <span class="re5">-q</span> <span class="nu0">1</span>
<span class="co4">smith:~$ </span>telnet localhost <span class="nu0">23</span>
Trying 127.0.0.1...
Connected to localhost.
Escape character is <span class="st_h">'^]'</span>.
You are an IDIOT
Connection closed by foreign host.</pre></div></div>


<h3>Използвайте внимателно!</h3>
<p style="text-align: justify;">Колкото и удобен и мощен да е netcat в изпълнението на своите услуги, трябва да се внимава много при използването му. При необмислено използване &#8211; това може да се окаже доста опасно за самите вас. Параметърът, който е отговорен за потенциални проблеми в сигурността е <strong><em>-e</em></strong>. Означава <strong>&#8220;execute&#8221;</strong> (&#8220;изпълни&#8221;). Всичко което стои след -e, Netcat стартира без замисляне и нужда от потвърждение &#8211; дори и един shell:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">smith:~$ </span>nc <span class="re5">-v</span> <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">6000</span> <span class="re5">-e</span> <span class="sy0">/</span>bin<span class="sy0">/</span><span class="kw2">bash</span></pre></div></div>


<p style="text-align: justify;">По този начин е достатъчно от компютъра <em>john</em> да зададете към Netcat параметрите smith и порта 6000 и по този начин без никакво идентифициране <em>john</em> ще получи достъп до вашия shell. Не е нужно много въображение, за да си представите какво може да се случи с компютъра smith, ако работи без защитна стена и е свързан към интернет.<br />
<strong>Един по-безопасен пример:</strong><br />
Тъй като мрежовата котка (NetCat) се храни с всякакви данни, които и подадете можете да я използвате и за stream на файлове през мрежата:</p>


<div class="wp-geshi-highlight"><div class="bash"><pre class="de1"><span class="co4">smith:~$ </span>nc <span class="re5">-l</span> <span class="re5">-p</span> <span class="nu0">8765</span> <span class="re5">-q</span> <span class="nu0">1</span> <span class="sy0">|</span> super_dupper.mp3
<span class="co4">john:~$ </span>nc smith <span class="nu0">8765</span> <span class="sy0">|</span> <span class="kw2">mplayer</span> -</pre></div></div>


<p style="text-align: justify;">Това става безпроблемно само с медиен плеър инсталиран на <em>john</em>, който може да чете данните директно от командния ред &#8211; в този пример <a href="http://en.wikipedia.org/wiki/Mplayer" target="_blank">Mplayer</a> се справя перфектно с тази задача.</p>
<h3>Малко повече</h3>
<p style="text-align: justify;">Показаните до тук примери покриват само една малка част от възможностите, които Netcat предлага. Освен горе-споменатите точки с този инструмент можете да пренасочвате портове, да протоколирате пренасянето на данни във вашата мрежа или да тествате стабилността на услуги.</p>
<p>По-детайлно разгледани Netcat-скриптове можете да намерите на вашата система на места като <em>/usr/share/doc/netcat/examples</em> или <em>/usr/share/doc/netcat-traditional/examples</em>. Страницата с упътване за ползване можете да видите с командата man nc съответно man netcat.</p>
<h3>Заключение</h3>
<p style="text-align: justify;">Netcat със лесните за използване и огромния брой от услуги се доказва като един незаменим помощник/инструмент при изпълняването на различни задачи в мрежата. В случай, че не ви достигат опциите, които предлага съществуват и разширената версия <a href="http://www.dest-unreach.org/socat/" target="_blank">Socat</a>, а за кодирано предаване <a href="http://cryptcat.sourceforge.net/" target="_blank">Cryptcat</a>. И двете приложения наподобяват по начина си на използване на Netcat, но залагат на различни основни точки при използването им.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bultux.org/tutorials/netcat-shweicarsko-nojche-za-mreji/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

