nc

Опубликовано admin в Пнд, 05/07/2010 - 14:54
NC(1) FreeBSD General Commands Manual NC(1)

НАИМЕНОВАНИЕ
nc -- реализация подключений и ожиданий входящих соединений, через TCP и UDP

КРАТКИЙ ОБЗОР
nc [-46DEdhklnorStUuvz] [-e IPsec_policy] [-i interval]
[
-P proxy_username] [-p source_port] [-s source_ip_address] [-T ToS]
[
-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [hostname]
[
port[s]]

ОПИСАНИЕ
Утилита nc (или netcat) используется практически для всего, что касается
TCP
или UDP. Открытие TCP соединений, посылка UDP пакетов, прослушива-
ние TCP и UDP портов, сканирование портов, и работа с версиями IPv4 и
IPv6.
В отличии от telnet(1), nc выводит сообщения об ошибках на стан-
дартный вывод ошибок, вместо посылки их на просто стандартный вывод, как
это делает telnet(1).

Основное применение:

+o примитивное TCP проксирование
+o написание shell-сценариев эмулируюших HTTP запросы
+o тестирование сетевых демонов
+o SOCKS или HTTP ProxyCommand для ssh(1)
+o и многое, многое другое

Существуют следующие опции:

-4 Использовать только IPv4 адреса.

-6 Использовать только IPv6 адреса.

-D Включить отладку на сокете.

-d Не читать стандартный ввод(stdin).

-h Вывести справку по nc.

-E Эквивалентно комбинации "-e 'in ipsec esp/transport//require'
-e 'out ipsec esp/transport//require'",
которая включает транс-
портный режим IPsec ESP в обоих направлениях

-e Если поддержка IPsec доступна, то можно указать используемую
политику IPsec, следуя синтаксису, описанному в
ipsec_set_policy(3). Если необходимо, этот флаг может быть
указана два раза, по одному правилу для каждого направления.

-i interval
Временной интервал задержки между посылаемыми и принимаемыми
строками текста. Так же задаёт интервал задержки между подклю-
чениями к нескольким портам.

-k Продолжать слушать(ожидать) следующее соединение, после того,
как текущее соединение было закрыто. Ошибочно использовать эту
опцию без опции -l.

-l Слушать входящие соединения, вместо подключения к удалённому
хосту. Ошибочно использовать эту опцию в связке с опциями -p,
-s, или -z. Кроме того, любой тайм аут указанный с помощью
опции -w игнорируется.

-n Не производить никаких преобразований имён и сервисов, в адреса
и номера портов.

-o ''Once-only режим''. По умолчанию, nc не завершает работу по
сигналу EOF поступившему на стандартный ввод, а продолжает
работу до тех пор, пока одна из сторон не отключится. Ключ -o
позволяет включать поддержку сигнала EOF.

-P proxy_username
Имя пользователя, чтобы представиться прокси серверу, требующему
аутентификации. Если не указать имя пользователя, тогда аутен-
тификация не удастся. На данный момент прокси аутентификация
поддерживается только для HTTP СОЕДИНЕНИЯ.

-p source_port
Исходный порт, который nc должен использовать. Ошибочно исполь-
зовать эту опцию в связке с опцией -l.

-r Исходные порты и/или порты назначения будут выбраны в случайном
порядке, нежели в последовательном.

-S Включить RFC 2385 TCP MD5 подпись.

-s source_ip_address
IP
интерфейса, который используется для посылки пакетов.
Ошибочно использовать эту опция в связке с опцией -l.

-T ToS Тип обслуживания (ToS) IP для соединения. Действующие значения,
обозначаются ярлыками "lowdelay", "throughput", "reliability",
или 8-битными шестнадцатеричными значениями обозначающимися, как
"0x".

-t Посылать RFC 854 DON'T и WON'T ответы и DO и WILL запросы. Это
делает возможным использовать nc для написания скриптов telnet
сессий.

-U Использовать сокеты (Unix Domain Sockets).

-u Использовать UDP, взамен используемого по-умолчанию TCP.

-v Выводить больше отладочной информации.

-w timeout
Если соединение и стандартный ввод не используются больше чем
заданный тайм аут в секундах, тогда соединения закроется. Флаг
-w не эффективен c опцией -l, т.е. nc будет слушать соединение
всегда, с или без флага -w. По умолчанию тайм аут не задан.

-X proxy_protocol
Использовать указанный протокол, для обращения к прокси серверу.
Поддерживает протоколы "4" (SOCKS v.4), "5" (SOCKS v.5) и
"connect" (HTTPS proxy).
Если протокол не указан, используется
SOCKS 5
версии.

-x proxy_address[:port]
Соединяться к хосту используя прокси с адресом proxy_address и
портом port. Если port не указан, тогда будут использоваться
стандартные порты для прокси протокола (1080 для SOCKS и 3128
для HTTPS).

-z Сканировать на наличие слушающих демонов, без посылки им данных.
Ошибочно использовать эту опцию в связке с опцией -l.

имя хоста может быть указано в виде IP адреса или его имени (если не
задана опция -n). Обычно имя хоста должно указываться, кроме случая с
использованием опции -l (слушает локальные адреса).

порты могут быть указаны по одному, либо в диапазоне. Диапазон в формате
nn-mm.
Обычно порт назначения должен быть указан, кроме случаев с
использованием опции -U (указывается сокет).

МОДЕЛЬ КЛИЕНТ/СЕРВЕР
Очень легко построить примитивную модель клиент/сервер используя nc.
На одной консоли запускаем nc слушать указанный порт на соединение.

Пример:

$ nc -l 1234

nc слушает порт 1234 на соединение. На второй консоли (или на второй
машине) соединяемся с машиной на прослушиваемый порт:

$ nc 127.0.0.1 1234

Должно произойти соединение между портами. Всё, что будет набрано на
второй консоли, будет отображено на первой и наоборот. После того,
как будет установлено соединение, nc не волнует, какая из сторон
будет использоваться, как `server', а какая, как `client'. Соединение
может быть прервано используя EOF (`^D').

ПЕРЕДАЧА ДАННЫХ
Предыдущий пример может быть расширен, для построения передачи данных.
Любая информация направленная в одну из сторон соединения будет получена
на другом конце, и ввод и вывод легко могут быть построены в такой
последовательности, чтобы эмулировать передачу данных.

Начните используя nc для прослушивание порта, c перенаправленным из него
файлом:

$ nc -l 1234 > filename.out

Используйте вторую машину, для подключения к слушающему процессу nc, с
перенаправлением в него передающегося файла.

$ nc host.example.com 1234 < filename.in

После передачи файла, соединение автоматически закроется.

ОБЩЕНИЕ С СЕРВЕРАМИ
Иногда полезно поздороваться с сервером "рукопожатием".Это может помочь
поиску неисправностей, может быть необходимо выяснить, какую именно
информацию сервер шлёт клиентам. Например, для получения домашней
страницы веб сайта:

$ echo -n "GET / HTTP/1.0rnrn" | nc host.example.com 80

Обратите внимание, что также будут отображены заголовки высланные веб
сервером. Они могут быть отфильтрованы с помощью sed(1), если это
необходимо.

Более сложный пример может быть построен, когда пользователь знает
формат ответа посылаемого сервером. Как другой пример, можем
представляться SMTP серверу:

$ nc localhost 25 << EOF
HELO host.example.com
MAIL FROM:
RCPT TO:
DATA
Body of email.
.
QUIT
EOF

СКАНИРОВАНИЕ ПОРТОВ
Полезно знать какие порты открыты и какие сервисы запущены на исследуе-
мой машине. Флаг -z может быть использован, чтобы узнать об открытых
портах не инициируя соединение. Например:

$ nc -z host.example.com 20-30
Connection to host.example.com 22 port [tcp/ssh] succeeded!
Connection to host.example.com 25 port [tcp/smtp] succeeded!

Был указан диапозон портов 20 - 30.

Также это может быть использовано, чтобы узнать какой серверный софт
запущен, и его версия. Эту информацию содержит приветствующее сообщение.
Как правило, чтобы сделать это, вначале необходимо инициировать соедине-
ние, затем оборвать его, когда будет получено приветствие. Это может
быть выполнено указанием маленького тайм аута с помощью флага -w , или
можно использовать команду "QUIT" на сервере:

$ echo "QUIT" | nc host.example.com 20-30
SSH-1.99-OpenSSH_3.6.1p2
Protocol mismatch.
220 host.example.com IMS SMTP Receiver Version 0.84 Ready

ПРИМЕРЫ
Открыть TCP соединение на порт 42 на host.example.com, используя 31337,
как исходный порт, с тайм аутом в 5 секунд:

$ nc -p 31337 -w 5 host.example.com 42

Открыть UDP соединение на порт 53 на host.example.com:

$ nc -u host.example.com 53

Открыть TCP соединение на порт 42 на host.example.com используя 10.1.2.3,
как исходный IP:

$ nc -s 10.1.2.3 host.example.com 42

Открыть TCP соединение на порт 42 на host.example.com, используя IPsec
ESP
для входящего и исходящего трафика.

$ nc -E host.example.com 42

Открыть TCP соединение на порт 42 на host.example.com, используя IPsec
ESP
только для исходящего трафика

$ nc -e 'out ipsec esp/transport//require' host.example.com 42

Создать и слушать на Unix Domain Socket:

$ nc -lU /var/tmp/dsocket

Соединиться на порт 42 на host.example.com используя HTTP прокси
10.2.3.4,
порт 8080. Этот пример может быть использован ssh(1);
смотрите ProxyCommand директивы в ssh_config(5) для получения
большей информации.

$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42

Ещё один похожий пример, на этот раз задействована прокси аутентификация
с именем пользователя "ruser", если прокси потребует его:

$ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42

СМОТРИТЕ ТАКЖЕ
cat(1), ssh(1)

АВТОРЫ
Оригинальная реализация сделана *Hobbit* .
Переписано с поддержкой ipv6 Eric Jackson .

ПРЕДУПРЕЖДЕНИЯ
Сканирование UDP портов будет всегда успешным (т.е. сообщит, что порты
открыты ), Использование комбинации флагов -uz относительно бесполезно.

FreeBSD 7.0 May 21, 2006 FreeBSD 7.0

P.S
Первоисточник. (_http://www.freebsd.org/cgi/man.cgi?query=nc&apropos=0&sektion=0&manpath=FreeBSD+7.1-RELEASE&format=html)
Отличие от мануала в Ubuntu 8.10:
Отсутствуют опции -E, -e и -o.
Присутствие опции:
-q После ввода EOF, ждать указанное количество секунд и выйти.
Если количество отрицательное, ждать всегда.


Статья взята с http://unixstuff.ru/ (_http://unixstuff.ru/files/54d1fbd64ab66f21e26c4670714d229e-6.html)

( categories: )