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

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

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

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

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

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

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

388
задан 10 August 2017 в 01:56

8 ответов

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

lsof -i :8000

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

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

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

И порт 22 (SSH):

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

Надежда, которая помогает.

0
ответ дан 10 August 2017 в 01:56

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

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

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

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

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Вы можете увидеть в lsof (LiSt Open Files), что это Java, что менее чем полезно. Запустив команду ps с PID, мы сразу увидим, что это CrashPlan.

0
ответ дан 10 August 2017 в 01:56

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

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

sudo netstat -peanut

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

sudo netstat -peanut | grep ":8000 "

Там нет процесса, который может скрыть от netstat.

0
ответ дан 10 August 2017 в 01:56

Можно использовать nmap.

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

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

sudo apt-get install nmap

Для получения дополнительной информации о nmap и других утилитах, идут Сюда

1Source:garron.me

2
ответ дан 10 August 2017 в 01:56

Другой способ использования socklist из пакета procinfo:

man socklist

ОПИСАНИЕ
socklist: Perl-скрипт, который дает вам список всех открытых сокетов, перечисляет типы, порт, inode, uid, pid, fd и программу, к которой он принадлежит.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon
0
ответ дан 10 August 2017 в 01:56

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

ss -nlp | grep 8000
0
ответ дан 10 August 2017 в 01:56

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

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

sudo lsof -i :8000

или

sudo netstat -lntup

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

4
ответ дан 20 March 2020 в 08:55

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

ss -townlup 

Netid               State                 Recv-Q                Send-Q                                    Local Address:Port                               Peer Address:Port
icmp6               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))
0
ответ дан 20 August 2020 в 01:11

Другие вопросы по тегам:

Похожие вопросы: