Netcat

Netcat — утилита для Unix, предназначенная для установки соединений по TCP и UDP, а также для передачи и получения данных через эти протоколы. Несмотря на свою универсальность и простоту, Netcat не является частью какого-либо официального стандарта, такого как POSIX.

Общие сведения
Netcat
Тип сетевая утилита (TCP, UDP)
Разработчик *Hobbit*
Написана на C
Операционная система Unix
Первый выпуск 28 октября 1995
Аппаратная платформа Microsoft Windows
Последняя версия 1.12 (21 апреля 2011)
Лицензия GPL
Сайт netcat.sourceforge.net

Действие

В простейшем случае Netcat вызывается командой:

nc host port

Эта команда устанавливает TCP-соединение с указанным хостом и портом, замыкая стандартный ввод на сетевой вывод и наоборот — стандартный вывод на сетевой ввод. Такая функциональность делает Netcat схожей с командой cat, что и обусловило её название. В случае невозможности соединения программа сообщает об ошибке через стандартный поток ошибок (stderr).

Утилита поддерживает следующие ключи:

-h Справка; ничего не выполняется
-v Подробная диагностика (verbose-режим)
-o выходной_файл Запись дампа данных в файл
-i число Задержка между отправляемыми данными (в секундах)
-t Совместимость с Telnet
-z Не отправлять данные (сканирование портов)
-u Использовать UDP (вместо TCP)
-l Пассивный режим (прослушивание порта)
-p число * Локальный номер порта (для -l)
-s host Использовать указанный локальный IP-адрес
-n Отключить DNS и поиск имён портов через /etc/services
-w число Тайм-аут соединения (в секундах)
-q число Время ожидания после получения EOF на входе (в секундах) **
-e исполняемый_файл ! Запустить указанную программу для обмена данными с сетью (вместо стандартных ввода/вывода)
-c команда ! То же, только в виде команды для /bin/sh
-k Продолжить прослушивание новых соединений после завершения текущего.

! — требуется специальная сборка; в стандартных исполняемых файлах опция отключена (может создавать уязвимость).
* — в некоторых реализациях номер порта для прослушивания задаётся только через -l, без использования -p.
** — присутствует не во всех версиях.

Дополнительные опции:

  • -d — доступна только в Windows-версии; переводит Netcat в режим невидимости (работа без видимого окна), что позволяет скрыть запуск программы.
  • -e <команда> — если Netcat скомпилирован с опцией GAPING_SECURITY_HOLE, запускает указанную программу при подключении к порту. Использование этой опции несёт угрозу безопасности (может использоваться для открытия «чёрного хода»).
  • -i <секунды> — задаёт интервал задержки между пересылками данных или очередными соединениями, что позволяет замаскировать передачу данных или сканирование портов.
  • -g <список-маршрутов> — позволяет маршрутизировать исходящий трафик через выбранные IP-адреса (обычно не работает из-за настроек современных сетевых устройств).
  • -G <индекс-хопа> — изменение порядка прохождения адресов списка маршрутизации, определённого опцией -g; позволяет моделировать нестандартные маршруты.
  • -l — режим прослушивания; совместно с -p позволяет Netcat ожидать входящих соединений на выбранном порте.
  • -L — доступна только в Windows-версии; перезапускает Netcat после завершения соединения, чтобы принять новые входящие соединения (используется с -p).
  • -n — отключает использование DNS и не разрешает имена хостов.
  • -o <файл> — сохраняет шестнадцатеричный дамп всех передаваемых данных.
  • -p <порт> — задаёт локальный номер порта, требуется для режима прослушивания; в Unix назначение портов <1024 возможно только пользователю root.
  • -r — случайное назначение локальных и удалённых портов (полезно для имитации нестандартной сетевой активности).
  • -s <адрес> — устанавливает исходящий IP-адрес, позволяя использовать подменённые параметры соединения.
  • -t — поддержка telnet-протокола, если Netcat собран с соответствующей опцией.
  • -u — использование UDP-протокола вместо TCP.
  • -v — уровень детализации вывода; при повторном использовании — более подробная информация о переданных данных.
  • -w <секунды> — задаёт время ожидания соединения и задержку перед завершением работы после получения EOF.
  • -z — используется для сканирования портов (без передачи данных)[1].

Применение

  • Тестирование и ручная работа с сетевыми протоколами;
  • Проверка доступности сетевых портов;
  • Сетевой интерфейс для командного интерпретатора UNIX (некоторые версии bash поддерживают подключение к TCP/UDP самостоятельно);
  • (С ключом -l) создание простых серверов;
  • Перенаправление портов в комбинации с inetd.

Примеры

Под Windows

Откройте командную строку, перейдите в папку с Netcat (например, C:\netcat\).

Чат между хостами

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

nc -l -p 1234

На другой машине выполните подключение к 10.10.10.1 на порт 1234:

nc 10.10.10.1 1234

Обмен сообщениями по Enter, завершение — CTRL+C.

Для Ubuntu используйте команду без ключа «-p».

Тестовая HTML-страница через Netcat (порт 8080)

(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080

Передача файла через Netcat (порт 8080)

(echo -e "HTTP/1.1 200 OK\nContent-Disposition: attachment; filename=целевое-имя-которое-увидит-клиент\nContent-Type: application/octet-stream\nConnection: close\n"; cat имя-файла-на-диске ) | nc -vv -l -p 8080

Передача каталога по сети (tarpipe, порт 3333)

nc -l -p 3333 | tar xv # Выполняется на принимающей стороне

tar cv * | nc -q 0 ip.адрес.приёмной.стороны 3333 # На стороне передачи

Имена команды

В разных системах утилита может называться: nc, netcat, ncat, pnetcat.

Примечания

Ссылки