В сети порт - интересная функция. Это способ для сетевого трафика определить целевое приложение или службу. Каждый процесс / служба получает свой уникальный порт. Порт всегда будет связан с IP-адресом хоста вместе с протоколом.
Это моя любимая метафора, чтобы описать, что такое порт. Представьте себе корабль с грузом, который отправится в далекую страну. Какая информация необходима, чтобы правильно добраться до места назначения? Для простоты предположим, что ему нужны страна (IP-адрес) и порт корабль пристыкуется.
В этом руководстве вы узнаете, как составить список открытых портов в Linux.
Порты в Linux
Порты действуют как конечная точка связи. Это 16-битное число (от 0 до 65535 в десятичной системе). Хотя диапазон велик, для простоты использования порты делятся на три категории. Каждая категория помечена как диапазон значений порта:
- От 0 до 1023: Это «хорошо известные» порты, также известные как «системные» порты, которые зарезервированы для системных процессов, которые предлагают широкий спектр сетевых услуг. Для связывания с «хорошо известным» портом процесс должен иметь привилегию суперпользователя.
- С 1024 по 49151: Это «Зарегистрированные» порты, также известные как «Пользовательские» порты, которые назначаются IANA для определенных услуг. По запросу процесс может иметь к ним доступ. В случае большинства систем для использования этих портов не требуются какие-либо привилегии суперпользователя.
- С 49152 по 65535: Это «динамические» порты, также известные как «частные» порты. Эти порты не могут быть зарегистрированы в IANA. Эти порты открыты для использования для частных или настраиваемых служб, а также могут автоматически выделяться как временные порты (недолговечные порты, используемые IP).
В Linux есть несколько способов проверить открытые порты. По умолчанию любой порт будет оставаться закрытым, если приложение не использует его. Если порт открыт, то он должен быть назначен службе / процессу.
Список открытых портов
Легче определить, какие порты используются, а не какие порты открыты. Вот почему в следующем разделе будут представлены методы для перечисления всех портов, которые в настоящее время используются. В Linux для этой задачи доступно несколько инструментов. Большинство из них встроено в любой дистрибутив Linux.
Изучение того, какие порты в настоящее время открыты, может быть полезно в различных сценариях. Можно настроить выделенный порт для определенного приложения. Открытый порт также может быть сильным признаком вторжения в сеть.
Следующие методы демонстрируются на Ubuntu 20.04.1 LTS.
Список протоколов и открытых портов из / etc / services
Файл / etc / services содержит информацию о запущенных в данный момент службах. Это большой файл, поэтому его можно перегружать.
$ cat / etc / services | меньше
Список открытых портов с помощью netstat
Инструмент netstat - это утилита для отображения сетевых подключений для TCP, таблиц маршрутизации и различных сетевых интерфейсов. Он также предлагает статистику сетевого протокола. Используя netstat, мы можем перечислить все открытые порты системы.
Выполните следующую команду netstat:
$ netstat -atu
Давайте разберем все флаги, которые мы использовали в этой команде.
- а: Сообщает netstat показывать все сокеты
- т: Сообщает netstat список портов TCP
- ты: Сообщает netstat список портов UDP
Вот еще один вариант команды netstat:
$ netstat -lntu
В команде используются два новых флага. Что они имеют в виду?
- л: Указывает netstat печатать только прослушивающие сокеты
- п: Указывает netstat показать номер порта
Чтобы отобразить PID процесса, использующего порт, используйте флаг «-p»:
$ netstat -lntup
Список открытых портов с помощью ss
Инструмент ss - это утилита для исследования сокета. Его использование похоже на netstat.
Чтобы вывести список открытых портов, выполните следующую команду ss:
$ ss -lntu
Флаги похожи на netstat. Описываемые ими функции также очень похожи.
- л: Указывает ss отображать сокеты для прослушивания
- п: Сообщает ss не пытаться разрешить имена служб
- т: Указывает ss отображать сокеты TCP
- ты: Указывает ss отображать сокеты UDP
Список открытых портов с помощью lsof
Команда lsof предназначена для вывода списка открытых файлов. Однако его также можно использовать для отображения открытых портов.
Выполните следующую команду lsof:
$ lsof -i
Чтобы получить открытые порты определенного протокола (TCP, UDP и т. Д.), затем определите его после флага «-i», используйте:
$ lsof -i
Список открытых портов с помощью nmap
Инструмент nmap - мощный инструмент для исследования сети и безопасности / сканирования портов. Он может сообщать обо всех открытых портах в системе.
Чтобы вывести список открытых TCP-портов, выполните следующую команду nmap. Здесь IP-адрес главного компьютера:
$ sudo nmap -sT -p- локальный хост
Здесь есть две части аргумента команды.
- -СТ: Этот раздел указывает Nmap сканировать TCP-порты.
- -п- : Это указывает Nmap сканировать все 65535 портов. Если не используется, то по умолчанию Nmap будет сканировать только 1000 портов.
Если вам нужно вывести список открытых портов UDP, выполните следующую команду nmap:
$ sudo nmap -sU -p- локальный хост
Чтобы получить как открытые порты TCP, так и UDP, используйте следующую команду:
$ sudo nmap -n -PN -sT -sU -p- локальный хостСписок открытых портов с помощью netcat
Инструмент netcat - это утилита командной строки для чтения и записи данных через сетевые соединения по протоколам TCP и UDP. Этот инструмент также можно использовать для вывода списка открытых портов. Он может выполнять тесты на определенном порту или на диапазоне портов.
Следующая команда netcat просканирует порт от 1 до 1000. Команда netcat по умолчанию выполнит сканирование по протоколу TCP:
$ nc -z -v локальный хост 1-1000
Также его можно расширить на весь список возможных портов:
$ nc -z -v локальный хост 1-65535
Давайте быстро разберем флаги.
- z: Указывает netcat сканировать только открытые порты без отправки каких-либо данных
- v: Указывает netcat работать в подробном режиме
Чтобы получить только открытые порты из этого списка, отфильтруйте вывод с помощью grep для термина «выполнено успешно».
$ nc -z -v localhost 0-65535 2> & 1 | grep успешноЕсли вы хотите выполнить сканирование по протоколу UDP, добавьте флаг «-u».
$ nc -z -v -u localhost 0-65535 2> & 1 | grep успешноПоследние мысли
Как было продемонстрировано, существует множество способов поиска открытых портов в Linux. Я предлагаю опробовать все методы, прежде чем вы решите, какой из них освоить. Если вы регулярно используете определенный инструмент, например netcat или nmap, то освоение связанных методов будет наиболее полезным.
Удачных вычислений!