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). Основное применение:- примитивное TCP проксирование - написание shell-сценариев эмулируюших HTTP запросы - тестирование сетевых демонов - SOCKS или HTTP ProxyCommand для ssh(1) - и многое, многое другоеСуществуют следующие опции: -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 (указывается сокет).имя хоста может быть указано в виде IP адреса или его имени (если не
задана опция -n). Обычно имя хоста должно указываться, кроме случая с
использованием опции -l (слушает локальные адреса).
порты могут быть указаны по одному, либо в диапазоне. Диапазон в формате nn-mm. Обычно порт назначения должен быть указан, кроме случаев с использованием опции -U (указывается сокет). МОДЕЛЬ КЛИЕНТ/СЕРВЕР Очень легко построить примитивную модель клиент/сервер используя nc. На одной консоли запускаем nc слушать указанный порт на соединение. Пример: $ nc -l 1234nc слушает порт 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-30Connection 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
Последние комментарии
11 недель 4 дня назад
35 недель 6 дней назад
2 года 36 недель назад
3 года 6 недель назад
3 года 29 недель назад
3 года 44 недели назад
3 года 45 недель назад
3 года 48 недель назад
4 года 7 недель назад
4 года 12 недель назад