Проверить порты не сложно, есть много инструментов, благодаря которым можно выполнить это действие. Но сначала надо разобраться, что это такое, зачем нужно.
Итак, разные программы, которых понаписали очень много, часто умеют взаимодействовать с данными из компьютерной сети. Для того, чтобы было понятно, какой программный продукт хочет использовать сетевые ресурсы, придумали идентификатор, который называется порт и однозначно определяет, что работать нужно именно с этой програмкой. За основу взяли обычные числа от 0 до 65536.
При этом есть программы, за которыми закреплены определённые числа (порты), на постояннной основе, а имеются и другие, которые работают с разными портами или сразу используют много портов. Имеется спецификация и разделение такое:
- системные: 0 - 1023;
- зарегистрированные: 1024 - 49151;
- динамические: 49152 - 65535.
Следует отметить, что сканировать порты надо осторожно. Если вы будете проводить сканирование без разрешения, то вас заблокируют или могут даже привлечь к ответственности. Призыв один, сканируйте только свои ресурсы или ресурсы, с которыми вам разрешили взаимодействовать.
Помогут определить наличие открытых и закрытых портов следующие программные продукты:
1. Утилита nestat и ss.
Работает netstat в Windows и Linux. Команда немного различается в синтаксисе в различных операционных системах. Справку можно получить с помощью:
Для Windows:
netstat /?
Для Linux:
# man netstat
Получить открытые порты можно с помощью следующей команды:
netstat -aon
или для постраничного вывода в Windows:
netstat -aon | more
или Linux:
# netstat -aon | less
Где, a - отображение всех подключений и портов прослушивания,
o - отображение ИД процесса каждого подключения,
n - отображение адресов и номеров портов в числовом формате.
Добавим букву b для отображения исполняемого файла, участвующего в создании каждого подключения или порта прослушивания.
netstat -aonb
Или например используем отображение статистики по протоколу tcp с отображением полного имени домена (FQDN) для внешних адресов:
netstat -s -p tcp -f
Можно использовать фильтры. Выводить каждые 5 секунд соединение со статусом "LISTENING" для 135 порта:
netstat -a -n 5 | find /I "LISTENING" | find /I "135"
или записывать вывод в файл:
netstat -a -n 5 | find /I "LISTENING" | find /I "135" > C:\135LISTEN.txt
Утилита netstat считается устаревшей в Linux. Вместо неё рекомендуют использовать ss. Для того, чтобы посмотреть опции используем man:
# man ss
Просмотр информации о всех портах, открытых в системе, и приложения, которое их открыло:
# ss -lp
Посмотреть какое приложение открыло конкретный порт:
# ss -lp | grep 8080
Отобразить все TCP или UDP соединения:
# ss -ta
# ss -ua
Просмотр PID процесса, использующих сокет:
# ss -ltp
А если нужно определить наличие открытых (закрытых) портов на удалённой машине, то здесь пригодятся такие программные приложения, как nc, nmap.
2. Утилита nc (netcat).
Программа работает как в Windows, так и в Linux, только придётся её устанавливать. В Windows дистрибутив копируется в любую папку, например в папку С:\Program Files\, далее прописываем путь к запускающему файлу в переменные среды и запускаем программу в командной строке, или в командной строке прописываем полный путь к файлу и затем запускаем его. В Linux после установки програмного обеспечения, не нужно прописывать путь к запускающему файлу.
Программа позволяет принимать и отсылать данные, работать в роли простенького веб-сервера или чата.
Просканировать на наличие открытого порта:
# nc -vn 192.168.10.243 22
или диапaзона портов:
# nc -vnz 192.168.10.243 0-65536
Просканировать UDP-порты:
# nc -vnzu 192.168.10.243 0-65536
Для запуска help для netcat:
# nc -h
3. nmap.
Одним из лучших инструментов для сканирования является nmap. Умеет работать в различных операционных системах. Много опций и различных сочетаний, различные виды сканирования, даже имеется возможность добавления скриптов.
Умеет сканировать один порт, множество портов, различное их сочетание:
# nmap -p 8080 192.168.10.243
# nmap -p 80, 8080 192.168.10.243
# nmap -p 0-65536 192.168.10.243
# nmap -p T:80,U:5547,22,137-139
Сканировать все TCP или UDP порты:
# nmap -sT 192.168.10.243
# nmap -sU 192.168.10.243
Определить открытые порты:
# nmap --open 192.168.10.243
Распознавать версии программ, запущенных на хосте:
# nmap -sV 192.168.10.243
Сохранить результаты в текстовый файл:
# nmap 192.168.10.243 > nmap-out.txt
В целях тестирования разрешено сканировать scanme.nmap.org, но небольшое количество раз в течение одного дня.
4. Powershell.
В powershell можно делать всё, что и в командной строке, и даже больше. Для этого есть командлеты. Для проверки сетевых соединений - Test-NetConnection (TNC). Но данный командлет появился в PowerShell 4.0. Если версия powershell ниже 4.0, то нужно обновиться. Запускаем программу и проверяем версию:
$PSVersionTable.PSVersion
Проверить порт на удалённом компьютере:
TNC 192.168.44.131 -Port 22
По имени компьютера:
TNC -ComputerName z1 -Port 22
5. Advanced Port Scanner.
Имеются также специальные утилиты с графическим интерфейсом, например Advanced Port Scanner, XSpider, а также онлайн-сервисы, которые предлагают проверить порты на ресурсе. Так выглядит интерфейс программы Advanced Port Scanner и вывод результатов о доступности портов.
Также есть и другие программы, но сделать вывод о доступности порта на компьютере уже возможно и с помощью вышеперечисленных средств.