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


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

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

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

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

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

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


292
2018-04-06 08:36


происхождения




ответы:


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

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)

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


189
2018-04-06 08:50



Это также работает на OSX, для чего стоит ..... - reevesy
Добавление -s TCP:LISTEN ограничивает результат фактическим гнездом для прослушивания и его процессом. - jhermann
Если вы ищете порт 8000, он возвращает PID 1889? Wat - CodyBugstein
Да, есть сервис с PID 1889 с использованием порта 8881. Я что-то пропустил? - Ten-Coin
@Imray пример ищет порт 8881. Столбец PID содержит идентификаторы процессов, а столбец NAME содержит порты. - Freek de Bruijn


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

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

sudo netstat -peanut

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

sudo netstat -peanut | grep ":8000 "

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


329
2018-04-06 08:58



netstat -peanut легче запомнить, чем netstat -taupen! - Douglas B. Staple
Неплохо ! - Просто отредактировал ответ, чтобы отразить ваш комментарий. Спасибо. - Antoine Rodriguez
'fuser -k 8000 / tcp', чтобы освободить этот порт - Jay Modi
если в столбце «PID / имя программы» вы видите тире вместо имени процесса, вы забыли добавить «sudo», - v.shashenko
так что это арахис eh - prusswan


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


164
2018-06-17 15:55



В одной команде: lsof -t -i :8000 | xargs ps -fp - Brett Y
Мне пришлось префикс sudo  но после этого это сработало для меня. Благодарю. - Dwayne Crooks
примечание: без sudo вы не получите ошибку, вы просто не получите ничего в качестве ответа. - Frank Nocke


Пытаться ss из iproute2 пакет:

ss -nlp | grep 8000

10
2018-04-06 08:44



ss также имеет свои собственные возможности фильтрации: ss -nlp '( sport = :8000 )', - GnP


Другой способ использования 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

5
2018-06-29 10:23





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

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

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

sudo apt-get install nmap

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

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


2
2018-04-06 08:46



nmap только скажет вам, что порт открыт, а не какой процесс его открыл. - Andrew Burns
Я нажал на ваш источник, чтобы прочитать [nmap] tries to guess which service is listening on each port, but it can make mistakes прямо перед тем, как он предлагает фактический метод, чтобы выяснить, какой процесс принадлежит сокету. - GnP
@gnp Вы также можете взглянуть на Эта, - Mitch♦
@ Митч я сделал. OP должен знать точный PID процесса в локальной системе. Nmap не является подходящим инструментом здесь, даже при обнаружении службы и версии. Либо он будет соответствовать элементу базы данных nmaps, который все еще позволяет OP в темноте, какой процесс убивать или перенастраивать, или он не будет, и OP будет иметь хороший отпечаток пальца и ссылку на insecure.org - GnP