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».
(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 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
nc -l -p 3333 | tar xv # Выполняется на принимающей стороне
tar cv * | nc -q 0 ip.адрес.приёмной.стороны 3333 # На стороне передачи
Имена команды
В разных системах утилита может называться: nc, netcat, ncat, pnetcat.
Примечания
Ссылки
- GNU Netcat — официальный сайт проекта
- Netcat для Windows