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

247

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

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

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

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

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

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

    
задан yansal 06.04.2013 в 10:36
источник

6 ответов

115

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

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)

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

    
ответ дан Ten-Coin 06.04.2013 в 10:50
источник
303

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

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

sudo netstat -peanut

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

sudo netstat -peanut | grep ":8000 "

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

    
ответ дан Antoine Rodriguez 06.04.2013 в 10:58
источник
162

Чтобы изложить ответ на @ 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.

    
ответ дан Andrew Burns 17.06.2014 в 17:55
источник
10

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

ss -nlp | grep 8000
    
ответ дан korjjj 06.04.2013 в 10:44
источник
4

Другой способ использования 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
    
ответ дан user.dz 29.06.2015 в 12:23
источник
1

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

  

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

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

sudo apt-get install nmap

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

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

    
ответ дан Mitch 06.04.2013 в 10:46
источник

Ознакомьтесь с другими вопросами по меткам