Все искусство управления состоит в искусстве быть честным (Т. Джефферсон).

Как проверить прослушиваемые порты в Linux (использующиеся порты)

5 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
16 августа 2019
Как проверить прослушиваемые порты в Linux (использующиеся порты)
При устранении неполадок сетевого подключения или проблем, связанных с конкретным приложением, в первую очередь следует проверить, какие порты фактически используются в вашей системе, а какое приложение прослушивает определенный порт.

В этой статье объясняется, как узнать, какие услуги прослушивает порты с помощью команд netstat, ss и lsof. Инструкции применимы для всех операционных систем на основе Linux и Unix, таких как macOS.

 

Сетевой порт идентифицируется его номером, соответствующим IP-адресом и типом протокола связи, таким как TCP или UDP.

Порт прослушивания – это сетевой порт, который прослушивает приложение или процесс, выступая в качестве конечной точки связи.

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

Вы не можете иметь две службы, прослушивающие один и тот же порт на одном и том же IP-адресе.

Например, если вы используете веб-сервер Apache, который прослушивает порты 80 и 443 и вы пытаетесь установить Nginx, позднее не удастся запустить, потому что порты HTTP и HTTPS уже используются.

 

netstat это инструмент командной строки, который может предоставить информацию о сетевых подключениях

Чтобы получить список всех прослушиваемых портов TCP или UDP, включая службы, использующие порты и состояние сокета, используйте следующую команду:

sudo netstat -tunlp

 

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

  • -t – Показать порты TCP.
  • -u – Показать порты UDP.
  • -n – Показать числовые адреса вместо разрешения хостов.
  • -l – Показывать только порты прослушивания.
  • -p – Показать PID и имя процесса слушателя. Эта информация отображается, только если вы запускаете команду от имени пользователя root или sudo.

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

Active Internet connections (only servers)                                                                                                                    
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name                                                              
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1214/nginx.conf                                                               
tcp6       0      0 :::21                   :::*                    LISTEN      1222/proftpd: (acce                                                           
tcp6       0      0 :::53                   :::*                    LISTEN      1089/named                                                                    
tcp6       0      0 ::1:953                 :::*                    LISTEN      1089/named                                                                    
tcp6       0      0 :::28355                :::*                    LISTEN      1142/sshd                                                                     
udp6       0      0 :::53                   :::*                                1089/named                                                                    
udp6       0      0 ::1:123                 :::*                                1766/ntpd                                                                     
udp6       0      0 :::123                  :::*                                1766/ntpd

 

Важными столбцами в нашем случае являются:

  • Proto – Протокол, используемый сокетом.
  • Local Address – IP-адрес и номер порта, на котором слушает процесс.
  • PID/Program name – PID и название процесса.

Если вы хотите отфильтровать результаты, используйте команду grep . Например, чтобы узнать, какой процесс прослушивает TCP-порт 22, вы должны набрать:

sudo netstat -tnlp | grep :22

 

Выходные данные показывают, что на этой машине порт 22 используется сервером SSH:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd

 

Если вывод пуст, это означает, что на порте ничего не прослушивается.

Вы также можете отфильтровать список на основе критериев, например, PID, протокола, состояния и т. д.

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

 

ssновый netstat. В нем отсутствуют некоторые netstatфункции, но он предоставляет больше состояний TCP и работает немного быстрее. Параметры команды в основном одинаковы, поэтому переход с netstat на ss не сложен.

Чтобы получить список всех прослушивающих портов с ss, просто наберите:

sudo ss -tunlp

 

Вывод почти такой же, как тот, о котором сообщили netstat:

Netid  State      Recv-Q Send-Q                               Local Address:Port                                              Peer Address:Port               
udp    UNCONN     0      0                                                *:123                                                          *:*                  
 users:(("ntpd",pid=1766,fd=17))                                                                                                                              
udp    UNCONN     0      0                                               :::53                                                          :::*                  
 users:(("named",pid=1089,fd=513),("named",pid=1089,fd=512))                                                                                                  
udp    UNCONN     0      0                                              ::1:123                                                         :::*                  
 users:(("ntpd",pid=1766,fd=21))                                                                                                                              
udp    UNCONN     0      0                                               :::123                                                         :::*                  
 users:(("ntpd",pid=1766,fd=16))                                                                                                                              
tcp    LISTEN     0      128                                              *:23455                                                        *:*                  
 users:(("sshd",pid=1142,fd=3))                                                                                                                               
tcp    LISTEN     0      32                                              :::21                                                          :::*                  
 users:(("proftpd",pid=1222,fd=0))                                                                                                                            
tcp    LISTEN     0      10                                              :::53                                                          :::*                  
 users:(("named",pid=1089,fd=21))                                                                                                                             
tcp    LISTEN     0      128                                            ::1:953                                                         :::*                  
 users:(("named",pid=1089,fd=25))                                                                                                                             
tcp    LISTEN     0      128                                             :::23455                                                       :::*                  
 users:(("sshd",pid=1142,fd=4))

 

lsof это мощная утилита командной строки, которая предоставляет информацию о файлах, открытых процессами.

В Linux все является файлом. Вы можете думать о сокете как о файле, который пишет в сеть.

Чтобы получить список всех прослушивающих TCP-портов, вызовите lsof:

sudo lsof -nP -iTCP -sTCP:LISTEN

 

Используются следующие параметры:

  • -n – Не конвертируйте номера портов в имена портов.
  • -p – Не разрешайте имена хостов, показывайте числовые адреса.
  • -iTCP -s TCP:LISTEN – Показывать только сетевые файлы с состоянием TCP LISTEN.
    COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME                                                                                                
    named      1089     bind   21u  IPv6  14401      0t0  TCP *:53 (LISTEN)                                                                                       
    named      1089     bind   22u  IPv4  14405      0t0  TCP 127.0.0.1:53 (LISTEN)                                                                               
    named      1089     bind   23u  IPv4  14407      0t0  TCP 213.159.210.167:53 (LISTEN)                                                                         
    named      1089     bind   24u  IPv4  14447      0t0  TCP 127.0.0.1:953 (LISTEN)                                                                              
    named      1089     bind   25u  IPv6  14448      0t0  TCP [::1]:953 (LISTEN)                                                                                  
    named      1089     bind   26u  IPv4  14120      0t0  TCP 172.17.0.1:53 (LISTEN)                                                                              
    ihttpd     1187     root    6u  IPv4  13799      0t0  TCP 213.159.210.167:2525 (LISTEN)                                                                       
    nginx      1224 www-data   83u  IPv4  14549      0t0  TCP *:80 (LISTEN)                                                                                       
    nginx      1224 www-data   84u  IPv4  14550      0t0  TCP 213.159.210.167:443 (LISTEN)                                                                        
    apache2    1242     root    3u  IPv4  13929      0t0  TCP 127.0.0.1:8080 (LISTEN)                                                                             
    apache2    6710 www-data    3u  IPv4  13929      0t0  TCP 127.0.0.1:8080 (LISTEN)                                                                             
    apache2    6714 www-data    3u  IPv4  13929      0t0  TCP 127.0.0.1:8080 (LISTEN)                                                                             
    shellinab 19516     root    4u  IPv4 824033      0t0  TCP 127.0.0.1:52073 (LISTEN)
    ...

     

Большинство имен выходных столбцов говорят сами за себя:

  • COMMAND, PID, USER – имя, pid и пользователь , запустив программу, связанную с портом.
  • NAME – номер порта.

 

Чтобы узнать, какой процесс прослушивает определенный порт, например, порт 3306, который вы используете:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

 

Выходные данные показывают, что порт 3306 используется сервером MySQL:

COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  534 mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)

Для получения дополнительной информации посетите страницу руководства lsof и прочитайте обо всех других мощных опциях этого инструмента.

 

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

Если у вас есть какие-либо вопросы или замечания, пожалуйста, оставьте комментарий ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

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

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

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close