Команда netcat | |
Оригинальный автор (ы) | * Hobbit * |
---|---|
Разработчик (и) | Avian Research |
Первоначальный выпуск | 28 октября 1995 г.; 24 года назад (1995-10-28) |
Стабильный выпуск | 1.10 / 2 января 2007 г.; 13 лет назад (02.01.2007) |
Операционная система | Unix и Unix-подобная, DOS, Microsoft Windows, Windows CE |
Тип | Сетевая служебная программа |
Лицензия | Исходная версия: индивидуальная, разрешающая лицензия. Версия GNU: GPL. Версия OpenBSD: BSD |
Веб-сайт | nc110.sourceforge.net |
netcat (часто сокращенно nc ) это компьютерная сетевая утилита для чтения и записи в сетевые соединения с использованием TCP или UDP. Команда разработана как надежная внутренняя часть, которая может использоваться напрямую или легко управляться другими программами и скриптами. В то же время это многофункциональный инструмент для отладки и исследования сети, поскольку он может создавать практически любое соединение, которое может понадобиться его пользователю, и имеет ряд встроенных возможностей.
Его список функций включает сканирование портов, передачу файлов и прослушивание портов, и он может использоваться как бэкдор.
Исходные функции netcat включают:
Переписывает, например, GNU и OpenBSD, поддерживает дополнительные функции. Например, OpenBSD nc поддерживает TLS, а GNU netcat изначально поддерживает режим туннелирования, поддерживающий UDP и TCP (опционально позволяющий туннелировать один через другой) в одной команде, где другие версии могут потребовать передачи данных от одного экземпляра netcat к другому.
nc mail.server.net 25
printf "GET / index.html HTTP / 1.0 \ r \ nHost: info.cern.ch \ r \ n \ r \ n "| nc info.cern.ch 80
Полный ответ (включая заголовки HTTP) будет выведен на стандартный вывод.
{printf 'HTTP / 1.0 200 OK \ r \ nContent-Length:% d \ r \ n \ r \ n '"$ (wc -c < some.file)"; cat some.file; } | nc -l 8080
Затем к файлу можно будет получить доступ через веб-браузер по адресу http: // servername: 8080 /. Netcat обслуживает файл только один раз первому клиенту, который подключается, а затем завершает работу; он также предоставляет длина содержимого для обозревателей, которые этого ожидают (это должно нормально работать в локальной сети, но может потенциально выйти из строя с любым типом межсетевого экрана). В некоторых версиях netcat, таких как netcat-Traditional в Debian 8.6, вам необходимо указать -p перед номером порта.
nc -vzu 192.168.0.1 80-90
Обратите внимание, что тесты UDP всегда отображаются как «открытые».
Этот тест полезен, если у вас есть доступ к серверу, который нужно протестировать, но вы не знаете, есть ли блок межсетевого экрана установить определенный порт UDP на сервере.
На принимающем хосте, т.е. на сервере, порт которого необходимо проверить, выполните следующие действия:
nc -l -u -p 4171
На отправляющем хосте выполните следующие действия - обратите внимание, что servname
- это имя хоста прослушивающего хоста:
nc -u servname 4172
Если текст введен на отправляющем хосте (введите что-нибудь и нажмите Enter) отображается также на прослушивающем хосте, тогда UDP-порт 4172 открыт. Если он не открыт, вы получите сообщение об ошибке, например «В соединении отказано».
Есть нюанс. На некоторых машинах IPv6 может быть версией IP по умолчанию для использования netcat
. Таким образом, с хостом, указанным в имени хоста, связываются с использованием IPv6, и пользователь может не знать об этом. Порты могут показаться закрытыми в тесте, даже если они будут открыты при использовании IPv4. Это может быть трудно заметить, и может возникнуть ложное впечатление, что порт заблокирован, хотя на самом деле он открыт. Вы можете принудительно использовать IPv4, добавив -4
к параметрам команд nc
.
echo '<0>message' | nc -w 1 -u loggerhost 514
Необычным использованием netcat
является сканирование портов. Netcat не считается лучшим инструментом для этой работы, но его может быть достаточно (более продвинутый инструмент - nmap )
nc -v -n -z -w 1 192.168.1.2 1-1000
Параметр -n
здесь запрещает поиск DNS, -z
запрещает nc
получать данные с сервера, а -w 1
устанавливает тайм-аут соединения после 1 секунды бездействия.
Еще одно полезное поведение - использование netcat
в качестве прокси. И порты, и хосты могут быть перенаправлены. Посмотрите на это пример:
nc -l 12345 | nc www.google.com 80
Порт 12345 представляет запрос.
Это запускает сервер nc
на порт 12345, и все соединения перенаправляются на google.com:80
. Если веб-браузер делает запрос на nc
, запрос будет отправлен в Google, но ответ не будет отправляется в веб-браузер. Это потому, что каналы однонаправлены. Это можно обойти с помощью именованного канала на перенаправить вход и выход . ut.
mkfifo backpipe nc -l 12345 0backpipe
Опция -c
также может использоваться с реализацией ncat
:
ncat -l 12345 -c 'nc www.google.com 80'
Использование именованного канала - более надежный метод, поскольку использование параметра -c
обеспечивает только одноразовый прокси.
Еще одна полезная функция - прокси-соединения SSL. Таким образом, трафик нельзя будет просмотреть в приложениях для прослушивания проводов, таких как wirehark. В UNIX это можно сделать с помощью mkfifo
, netcat
и openssl
.
mkfifo tmp mkfifo tmp2 nc -l 8080 -k>tmp < tmp2 while true; do openssl s_client -connect www.google.com:443 -quiet < tmp>tmp2 done
netcat
можно использовать для превращения любого процесса в сетевой сервер. Он может прослушивать порт и перенаправлять входящие данные этому процессу.
Параметр -e
порождает исполняемый файл, вход и выход которого перенаправляются через сетевой сокет.
Например, можно открыть процесс оболочки для удаленных компьютеров.
Для этого на компьютере A с IP-адресом 192.168.1.2 выполните следующую команду:
$ nc -l -p 1234 -e / bin / sh
Затем с любого другого компьютера в той же сети можно запустить команду nc
:
$ nc 192.168.1.2 1234 ls -la total 4288 drwxr-xr-x 15 фиктивных пользователей 4096 17.02.2009 07:47. drwxr-xr-x 4 фиктивных пользователя 4096 18.01.2009 21:22.. -rw ------- 1 фиктивных пользователей 8192 16.02.2009 19:30.bash_history -rw-r - r- - 1 фиктивные пользователи 220 2009-01-18 21:04.bash_logout...
Таким образом, можно использовать параметр -e
для создания элементарного бэкдора. Некоторые администраторы воспринимают это как риск и поэтому не разрешают использовать netcat
на компьютере.
Ncat - это инструмент, аналогичный netcat, предоставляемый набором Nmap. «Хотя Ncat не построен на каком-либо коде из« традиционного »Netcat (или любой другой реализации), Ncat, безусловно, основан на Netcat по духу и функциональности».
Возможности Ncat включают: способность связывать Ncats вместе перенаправьте порты TCP и UDP на другие сайты, поддержку SSL и прокси-соединения через прокси-серверы SOCKS4 или HTTP (метод CONNECT) (также с опциональной аутентификацией прокси).
ncat example.org 8080
ncat -l 8080
ncat - -sh-exec "ncat example.org 80" -l 8080 --keep-open
ncat --exec "/ bin / bash" -l 8081 --keep-open
ncat --exec "/ bin / bash" --max-conns 3 --allow 192.168.0.0/24 -l 8081 --keep-open
ncat --proxy socks4host --proxy-type socks4 --proxy-auth user smtphost 25
ncat -l --proxy- введите http localhost 8888
пользователь @ HOST1 $ ncat -l 9899>выходной файл пользователь @ HOST2 $ ncat HOST1 9899 < inputfile
user @ HOST1 $ ncat -l 9899 < inputfile [email#160;protected] $ ncat HOST1 9899>outputfile
Предположим, у вас есть туннель SSH, и вы хотите скопировать файл на удаленный компьютер. Вы можете просто scp
напрямую, но это открывает другое соединение. Цель состоит в том, чтобы повторно использовать существующее соединение. Для этого можно использовать netcat:
Когда вы входите по SSH, добавьте -L 31000: 127.0.0.1: 31000
(это перенаправление портов, отправка всего с порта 31000 на удаленном компьютере). компьютер к тому же порту на локальном компьютере)
ncat -lvnp 31000 127.0.0.1>файл
ncat -v -w 2 127.0.0.1 31000 < file
Никаких дополнительных накладных расходов. TCP заботится об исправлении ошибок. SSH уже зашифровал канал.
Исходная версия netcat была программой Unix. Последняя версия (1.10) была выпущена в марте 1996 года.
Существует несколько реализаций в системах POSIX, включая перезапись с нуля, например GNU netcat или OpenBSD. netcat, последний из которых поддерживает IPv6 и TLS. Версия OpenBSD была перенесена на базу FreeBSD и Windows / Cygwin. Mac OS X поставляется с netcat, установленным начиная с OSX 10.13, или пользователи могут использовать MacPorts для установите вариант.
A DOS версия netcat под названием NTOOL включена в группу пакетов FreeDOS Networking. Он основан на стеке WatTCP и лицензирован по Общественной лицензии Европейского Союза Версия 1.1.
Известные порты для встраиваемых систем включают версии для Windows CE (с названием "Netcat 4 wince ") или для iPhone.
BusyBox по умолчанию включает облегченную версию netcat.
Solaris 11 включает реализацию netcat на основе OpenBSD netcat.
Socat - более сложный вариант netcat. Он больше и гибче, и в нем больше параметров, которые необходимо настроить для данной задачи. 1 февраля 2016 г. и выпустил рекомендации по безопасности в отношении параметра composite Диффи-Хеллмана, который был жестко закодирован в OpenSSL <101.>реализация socat. Маловероятность того, что составной элемент мог быть непреднамеренно введен, когда требуется простое число, привела к подозрению в саботаже с целью введения бэкдора уязвимости программного обеспечения.. Эта ошибка socat затронула версии 1.7.3.0 и 2.0.0-b8, она была исправлена в следующих выпусках 1.7.3.1 и 2.0.0-b9.
Cryptcat - это версия netcat со встроенными возможностями транспортного шифрования.
В середине 2005 года Nmap анонсировал еще одно воплощение netcat под названием Ncat. Он предлагает новые возможности, такие как «посредничество при подключении», перенаправление TCP / UDP, поддержка клиентов и серверов SOCKS4, возможность «цепочки» процессов Ncat, проксирование HTTP CONNECT (и создание цепочек прокси), поддержка SSL-подключения / прослушивания и фильтрация IP-адресов / подключений.. Как и Nmap, Ncat является кроссплатформенным.
. В некоторых системах модифицированные версии или аналогичные утилиты netcat имеют имена команд nc
, ncat
, pnetcat
, socat
, sock
, socket
, sbd
.
nc (1)
– Linux Пользовательские команды Вручную