<?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%ba%d0%b0%d0%ba-%d0%b4%d0%b0/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bultux.org</link>
	<description>Български блог посветен на свободния софтуер и новото от Linux света</description>
	<lastBuildDate>Sat, 04 Sep 2010 08:13:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.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> за &#8222;listen&#8220; (на български: слушане) и <strong>-p 6000</strong>, където параметъра <strong>-p</strong> определя порта, на който сървъра да &#8222;слуша&#8220; &#8211; в случая 6000. Едно пренасочване за писане се грижи за това, че netcat ще запише входящите данни в определен от нас файл.<br />
<span id="more-199"></span>На разположение в терминала имаме командата netcat и кратката й форма <strong>nc</strong>. За стартиране ще използваме следната команда:</p>
<pre class="brush: bash;">smith:~$ nc -l -p 6000 &gt; got_test.txt</pre>
<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>
<pre class="brush: bash;">john:~$ nc smith 6000 &lt; test.txt</pre>
<p style="text-align: justify;">След като на john сте стартирали програмата трябва да я прекратите с [Ctrl]+[C]. Стартирания на <em>smith</em> Netcat ще се изключи сам след като запише файла <em><strong>got_test.txt</strong></em>. По подобен начин се процедира когато искате да прехвърлите цялото съдържание на директория между два компютъра:</p>
<pre class="brush: bash;">smith:~$ nc -l -p 6000 | tar x
john:~$ tar cf - * | nc smith 6000</pre>
<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>
<pre class="brush: bash;">&gt;smith:~$ nc -l -p 2000
john:~$ nc smith -p 2000</pre>
<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>
<pre class="brush: bash;">smith~$ nc -vz localhost 1-1024
localhost [127.0.0.1] 631 (ipp) open</pre>
<p style="text-align: justify;">Параметъра <strong><em>-v</em></strong> (&#8222;verbose&#8220;) се грижи за показването на пълния изход от командата, опцията <strong><em>-z</em></strong> (&#8222;zero I/O mode&#8220;) кара 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>
<pre class="brush: bash;">$ echo -e &quot;GET / HTTP/1.1\r\n&quot; | nc www.linux-user.de 80 &gt; test.html</pre>
<p style="text-align: justify;">Първата команда, която пращаме към nc, <em>echo -e &#8222;GET / HTTP/1.1\r\n&#8220;</em> представлява заявка (&#8222;Request&#8220;), която по принцип се изпраща от всеки уеб браузър. С <em>GET</em> заявяваме и коя страница от уеб сървъра искаме да прегледаме &#8211; в случая това е <strong>/</strong> (root).<br />
По-рано, обаче, научихме, че Netcat може да работи и като сървър. Така, че можем да разширим примера като разширим горната команда по следния начин:</p>
<pre class="brush: bash;">$ echo -e &quot;Get / HTTP/1.1\r\n&quot; | nc www.linux-user.de 80 &gt; test.html | nc -l -p 8080 -q 1</pre>
<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>
<pre class="brush: bash;">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</pre>
<p style="text-align: justify;">Разбира се с малко основни знания в шел програмирането netcat може да бъде накаран да работи по-дълго време като уеб сървър &#8211; за целта трябва да вмъкнете netcat в един безкраен <em><strong>while</strong></em> цикъл:</p>
<pre class="brush: bash;">while true; do; nc -l -p 8080 -q 1 &lt; test.html; done</pre>
<p style="text-align: justify;">По този начин (изискват се root права) можете да имплементирате на привилегировани портове от 1 до 1024 така наречените <a href="http://en.wikipedia.org/wiki/Honeypot_%28computing%29" target="_blank">Honeypots</a>, на български &#8222;бурканче с мед&#8220;. Така се наричат услуги, които не съществуват, а техните портове реагират само на заявки, за да се проследят потенциални нападатели или както ще покажа в следния пример да ядосвате кварталните хакери при опит за връзка към вас през <a href="http://en.wikipedia.org/wiki/Telnet" target="_blank">telnet</a>:</p>
<pre class="brush: bash;">smith:~# echo &quot; You are an IDIOT&quot; | 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.</pre>
<h3>Използвайте внимателно!</h3>
<p style="text-align: justify;">Колкото и удобен и мощен да е netcat в изпълнението на своите услуги, трябва да се внимава много при използването му. При необмислено използване &#8211; това може да се окаже доста опасно за самите вас. Параметърът, който е отговорен за потенциални проблеми в сигурността е <strong><em>-e</em></strong>. Означава <strong>&#8222;execute&#8220;</strong> (&#8222;изпълни&#8220;). Всичко което стои след -e, Netcat стартира без замисляне и нужда от потвърждение &#8211; дори и един shell:</p>
<pre class="brush: bash;">smith:~$ nc -v -l -p 6000 -e /bin/bash</pre>
<p style="text-align: justify;">По този начин е достатъчно от компютъра <em>john</em> да зададете към Netcat параметрите smith и порта 6000 и по този начин без никакво идентифициране <em>john</em> ще получи достъп до вашия shell. Не е нужно много въображение, за да си представите какво може да се случи с компютъра smith, ако работи без защитна стена и е свързан към интернет.<br />
<strong>Един по-безопасен пример:</strong><br />
Тъй като мрежовата котка (NetCat) се храни с всякакви данни, които и подадете можете да я използвате и за stream на файлове през мрежата:</p>
<pre class="brush: bash;">smith:~$ nc -l -p 8765 -q 1 | super_dupper.mp3
john:~$ nc smith 8765 | mplayer -</pre>
<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>
