Як знати, яка програма прослуховується на даному порту?


377

Я підозрюю, що програма слухає на порту 8000моєї машини.

Коли я запускаю таку команду, я отримую цю помилку:

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

Якщо я використовую інший порт ( 8000за замовчуванням), веб-сервер працює нормально.

Якщо я запускаю wget localhost:8000з командного рядка, він повертається 404 Not Found.

Що я можу зробити (або які інструменти доступні), щоб знайти, яку програму слухає на порту 8000, а звідки там, де ця програма налаштована?

Відповіді:


313

Відкрийте свій термінал і введіть як

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)

Сподіваюся, що це допомагає.


2
Це також працює на OSX на те, на що воно вартує .....
reevesy

2
Додавання -s TCP:LISTENобмежує результат фактичним розеткою прослуховування та його процесом.
jhermann

1
Якщо ви шукаєте порт 8000, він повернеться PID 1889? wat
CodyBugstein

Так, є сервіс з PID 1889 за допомогою порту 8881. Я щось не пропускаю?
rɑːdʒɑ

1
@Imray в прикладі шукає порт 8881. Стовпець PID містить ідентифікатори процесу, а стовпець NAME містить порти.
Фрік де Бреййн

377

Ви можете використовувати netstat, щоб побачити, який процес прослуховується на якому порту.

Ви можете використовувати цю команду, щоб отримати повну деталь:

sudo netstat -peanut

якщо вам потрібно точно знати, хто слухає порт 8000, ви можете скористатися цим:

sudo netstat -peanut | grep ":8000 "

Немає жодного процесу, який можна приховати від netstat.


117
netstat -peanutпростіше запам'ятати, ніж netstat -taupen!
Дуглас Б. Степлер

9
Хороший ! - Ви просто відредагували відповідь, щоб відобразити ваш коментар. Дякую.
Антуан Родрігес

2
'fuser -k 8000 / tcp', щоб звільнити цей порт
Jay Modi

3
якщо в стовпці "PID / назва програми" ви бачите тире замість назви процесу, ви забули додати "sudo"
v.shashenko

3
значить, це арахіс е
prusswan

172

Щоб пояснити відповідь на @ 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.


9
В одній команді:lsof -t -i :8000 | xargs ps -fp
Brett Y

8
Мені довелося префікс, sudo але після цього він працював на мене. Дякую.
Дуейн Крукс

4
зауважте: якщо sudoви не отримаєте помилку, ви просто не отримаєте нічого як відповідь.
Френк Нокк

13

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

ss -nlp | grep 8000

5
ssтакож має свої власні можливості фільтрації: ss -nlp '( sport = :8000 )'.
GnP

6

Ще один спосіб використання 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

2

Ви можете використовувати nmap.

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

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

sudo apt-get install nmap

Щоб дізнатися більше про nmap та інші утиліти, перейдіть сюди

1 Джерело: garron.me


nmap скаже вам лише, що порт відкритий, а не який процес його відкрив.
Ендрю Бернс

1
Я перейшов до вашого джерела, щоб прочитати [nmap] tries to guess which service is listening on each port, but it can make mistakesправо, перш ніж він запропонує фактичний метод, щоб з'ясувати, якому процесу належить сокет.
GnP

@gnp Ви також можете поглянути на це .
Мітч

@Міч я зробив. ОП повинен знати точний PID процесу в локальній системі. Тут Nmap не є правильним інструментом, навіть із виявленням сервісу та версій. Або він буде відповідати елементу в базі даних nmaps, який все ще дає OP в темний час щодо того, який процес вбити або перенастроїти, або він не буде, і OP матиме приємний відбиток пальця та посилання на insecure.org
GnP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.