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

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

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

  & GT; python -m SimpleHTTPServer
# Множество ошибок python
socket.error: [Errno 98] Адрес уже используется
 

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

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

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

284 голоса | спросил yansal 6 PMpSat, 06 Apr 2013 12:36:43 +040036Saturday 2013, 12:36:43

6 ответов


174

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

  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 пользователь 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 6 PMpSat, 06 Apr 2013 12:50:18 +040050Saturday 2013, 12:50:18
324

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

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

  sudo netstat -peanut
 

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

  sudo netstat -peanut | grep ": 8000"
 

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

ответил Antoine Rodriguez 6 PMpSat, 06 Apr 2013 12:58:37 +040058Saturday 2013, 12:58:37
163

Чтобы изложить ответ на @ 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
прокси 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
корень 3075 1 15 мая24? 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 J0000006Europe/Moscow 2014, 19:55:48
10

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

  ss -nlp | grep 8000
 
ответил korjjj 6 PMpSat, 06 Apr 2013 12:44:23 +040044Saturday 2013, 12:44:23
5

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

man socklist

  

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

sudo socklist

  введите имя порта 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 чашек
udp 5353 17855 107 679 12 авахи-демон
 
ответил user.dz 29 J0000006Europe/Moscow 2015, 13:23:43
2

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

  

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

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

  sudo apt-get install nmap
 

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

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

ответил Mitch 6 PMpSat, 06 Apr 2013 12:46:13 +040046Saturday 2013, 12:46:13

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132