NetCat. Как проверить заблокированные порты

После установки и настройки фаервола стоит убедиться, что он действительно работает. Лучший способ это сделать — отправить запрос на интересующий порт со сторонней машины. Если запрос прошёл — то порт открыт. Если вернулся отказ или запрос оборвался, то порт закрыт и фаервол работает верно.

Для такой проверки потребуется любой компьютер с Unix/Linux и утилита NetCat «nc» (она часто идёт из коробки со многими дистрибутивами). Эта утилита позволяет стучать как в TCP, так и в UDP порты. И имеет довольно понятный синтаксис команд. Взглянем на пример использования:

nc -zv ip_адрес порт

Ключ «z» означает, что не надо отправлять никаких данных. Если его не поставить, то после ввода команды сначала будет дан ответ удалось или не удалось соединиться с портом, а потом будет пуста строка для отправки данных. В таком случае набираем данные руками и жмём Enter для отправки. Но такой подход редко используется, обычно достаточно проверить доступность порта, поэтому ставят ключ «z».

Ключ «v» заставляет команду выводить информацию о результате сканирования. Продемонстрируем работу на примере (доступ к 80-ому TCP порту на ip адресе 8.8.8.8):

alex@alex-pc:~$ nc -zv 8.8.8.8 80

Connection to 8.8.8.8 80 port [tcp/http] succeeded!

Если нужно пощупать UDP порт, то добавляем ключ «-u»:

nc -zvu ip_адрес порт

Сканирование диапазона портов

Порой возникает потребность в сканировании диапазона портов. Для этого достаточно через тире ввести порт начала и порт окончания диапазона:

nc -zv ip_адрес порт-порт

Модифицируем и выполним предыдущий пример:

alex@alex-pc:~$ nc -vz 8.8.8.8 80-83

Connection to 8.8.8.8 80 port [tcp/http] succeeded!

nc: connect to 8.8.8.8 port 81 (tcp) failed: No route to host

nc: connect to 8.8.8.8 port 82 (tcp) failed: No route to host

nc: connect to 8.8.8.8 port 83 (tcp) failed: No route to host

Очевидно, что если выбрать сразу большой диапазон, то на экране будет слишком много «failed». Поэтому если захочется вывести только успешные попытки, то стоит воспользоваться функцией grep, чтобы отфильтровать строки по слову succeeded:

alex@alex-pc:~$ nc -vz 8.8.8.8 80-83 2>&1 | grep succeeded

Connection to 8.8.8.8 80 port [tcp/http] succeeded!

Прослушивание порта

С помощью NetCat можно не только проверять доступность портов и отправлять на них текстовые команды (если не использовать ключ «z», о котором говорил раньше), но прослушивать порты. Чтобы начать прослушивание порта своего компьютера, необходимо выполнить команду с ключом «l» (строчная L) и номером порта:

nc -l ip_адрес порт

Если на порт будет что-то приходить, то оно будут напечатано в терминале.

Обратите внимание, что эту команду надо выполнять от root пользователя.

P.S.

Наверное, уже догадались, что таким способом возможно сделать чат между компьютерами. Только надо договориться о портах и открыть два терминала на каждой машине (на приём и передачу). К примеру, один собеседник отправляет сообщения на порт 5000, а принимает по 5001. Второй наоборот — слушает 5000 и отправляет на 5001. Тогда команда отправки для первого будет выглядеть так:

nc ip_адрес 5000

А на приём команда на втором терминале:

nc -l ip_адрес 5001

Для второго собеседника в командах надо только поменять порты.



2020-03-31T10:41:05
Интернет