Как узнать, какая программа прослушивает данный порт?

Я подозреваю, что программа прослушивает порт 8000 на моей машине.

Когда я запускаю следующую команду, я получаю эту ошибку:

> python -m SimpleHTTPServer# Lots of python errorsocket.error: [Errno 98] Address already in use

Если я использую другой порт (8000 по умолчанию), веб-сервер работает нормально.

Если я убегу wget localhost:8000 из командной строки он возвращает 404 Not Found.

Что я могу сделать (или какие инструменты доступны), чтобы узнать, какая программа прослушивает порт 8000, и оттуда, где настроена эта программа?

Откройте свой терминал и введите как

lsof -i :8000

эта команда выведет вам список приложений, используемых этим портом, с PID.(Если результатов нет, запустите через sudo поскольку у вас может не быть разрешения на определенные процессы.)

Например, с портом 8000 (python3 -m http.server):

$ lsof -i :8000COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAMEpython3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

И порт 22 (SSH):

$ sudo lsof -i :22COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAMEsshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

Надеюсь, это поможет.

Вы можете использовать netstat, чтобы узнать, какой процесс прослушивает какой порт.

Вы можете использовать эту команду, чтобы получить полную информацию :

sudo netstat -peanut

если вам нужно точно знать, какой из них прослушивает порт 8000, вы можете использовать это :

sudo netstat -peanut | grep ":8000 "

Нет такого процесса, который мог бы скрыться от netstat.

Чтобы разъяснить ответ @ 33833, вы можете получить очень подробную информацию, например:

$ lsof -i :8000COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEsquid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)$ ps -fp 1289UID        PID  PPID  C STIME TTY          TIME CMDproxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Я сразу вижу, что кальмар - это процесс, но на самом деле это мой squid-deb-proxy это значит занять порт.

Еще один хороший пример java-приложения:

$ lsof -i :4242COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEjava    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)$ ps -fp 3075UID        PID  PPID  C STIME TTY          TIME CMDroot      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Вы можете видеть в lsof (Список открытых файлов), что это java, что менее чем полезно. Запускающий ps команда с помощью PID, мы сразу видим, что это CrashPlan.

Попробуй ss от iproute2 пакет:

ss -nlp | grep 8000

Другой способ, использующий socklist от procinfo пакет:

man socklist

описание
socklist это скрипт на Perl, который предоставляет вам список всех открытых сокетов с перечислением типов, портов, индексов, uid, pid, fd и программы, к которой он принадлежит.

sudo socklist

type  port      inode     uid    pid   fd  nametcp     53      28749       0   1721    5  dnsmasqtcp    631      29190       0   2433   11  cupsdtcp  42376      82230    1000   1345   84  firefoxtcp  49048      71686    1000   1345   67  firefoxtcp  41248      81672    1000   1345  119  firefoxtcp  54676      84558    1000   1345   73  firefoxudp  56107      66258       0   3268   20  dhclientudp  40804      17857     107    679   14  avahi-daemonudp     53      28748       0   1721    4  dnsmasqudp     68      67427       0   3268    6  dhclientudp    631      19692       0    765    8  cups-browsedudp   5353      17855     107    679   12  avahi-daemon

Из-за низкого уровня в сообществе я не могу здесь комментировать. Без sudo все вышеперечисленные команды не будут предоставлять вам идентификатор процесса / Имя программы.

Итак, вам нужно ввести следующие вещи:

sudo lsof -i :8000

или

sudo netstat -lntup

вы можете проверить эти данные команды с помощью man, help или мой любимый помощник

Вы можете использовать nmap.

Действительно важно знать, какие порты открыты на вашем ПК, это полезно не только для Linux, но и для других операционных систем, в Linux есть множество инструментов для проверки того, какие порты открыты, наиболее распространенным является nmap, который является инструментом командной строки, но также существует графический интерфейс за это, если вы предпочитаете такой способ.1

чтобы установить его, просто нажмите Ctrl+Alt+T на клавиатуре, чтобы открыть терминал. Когда он откроется, выполните приведенную ниже команду:

sudo apt-get install nmap

Для получения дополнительной информации о nmap и других утилитах перейдите по ссылке Здесь

1Источник:garron.me

Вот простая для запоминания команда

ss -townlup Netid               State                 Recv-Q                Send-Q                                    Local Address:Port                               Peer Address:Porticmp6               UNCONN                0                     0                                                *%eth0:58                                            *:*udp                 UNCONN                0                     0                                         127.0.0.53%lo:53                                      0.0.0.0:*udp                 UNCONN                0                     0                                     172.31.26.71%eth0:68                                      0.0.0.0:*tcp                 LISTEN                0                     128                                             0.0.0.0:22                                      0.0.0.0:*tcp                 LISTEN                0                     128                                             0.0.0.0:443                                     0.0.0.0:*tcp                 LISTEN                0                     128                                       127.0.0.53%lo:53                                      0.0.0.0:*tcp                 LISTEN                0                     128                                                [::]:22                                         [::]:*tcp                 LISTEN                0                     128                                                [::]:443                                        [::]:*tcp                 LISTEN                0                     100                                                   *:9090                                          *:*                    users:(("java",pid=13008,fd=16))tcp                 LISTEN                0                     100                                                   *:8080                                          *:*                    users:(("java",pid=11556,fd=12))