Определение, какой процесс связывается с портом

В bash:

bash -c 'while [ 0 ]; do echo "I will not automate this punishment in absurdum."; done'

(echo мог быть заменен любой командой...

Или в perl:

perl -e 'for (;1;) {print "I will not automate this punishment in absurdum.\n"}'

Где print "I will not automate this punishment in absurdum.\n" мог быть заменен "любой" командой, окруженной обратными галочками (').

И для паузы, добавьте a sleep оператор в для цикла:

bash -c 'while [ 0 ]; do echo "I will not automate this punishment in absurdum."; sleep 1; done'

и

perl -e 'for (;1;) {print "I will not automate this punishment in absurdum.\n"; sleep 1}'
92
08.05.2011, 16:25
5 ответов

netstat -lnp перечислит pid и обработает имя рядом с каждым портом прослушивания. Это будет работать в соответствии с Linux, но не всеми другими (как AIX.) Добавляют -t если Вы хотите TCP только.

# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:24800           0.0.0.0:*               LISTEN      27899/synergys
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      3361/python
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2264/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22964/apache2
tcp        0      0 192.168.99.1:53         0.0.0.0:*               LISTEN      3389/named
tcp        0      0 192.168.88.1:53         0.0.0.0:*               LISTEN      3389/named

и т.д.

116
27.01.2020, 19:30
  • 1
    Прохладный, спасибо. Похож на это, которое работает под RHEL, но не в соответствии с Солярисом (как Вы указали). Кто-либо знает, существует ли что-то подобное для Соляриса? –   14.03.2011, 23:01
  • 2
    netstat -p выше мой голос. также посмотрите на lsof. –  Rich Homolka 15.03.2011, 21:56
  • 3
    Как в стороне, для окон это подобно: netstat-aon | больше –  Jonathan 26.08.2014, 21:50
  • 4
    Что относительно для SCTP? –  sudo 25.05.2017, 05:24

На AIX netstat и rmsock может использоваться для определения привязки процесса:

[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4       0      0  *.37               *.*        LISTEN
f1000700025de3b0 tcp        0      0  *.80               *.*        LISTEN
f1000700002803b0 tcp4       0      0  *.111              *.*        LISTEN
f1000700021b33b0 tcp4       0      0  127.0.0.1.32780    *.*        LISTEN

# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).
12
27.01.2020, 19:30
  • 1
    Спасибо за это! Существует ли способ, однако, просто отобразить, какой процесс слушают на сокете (вместо того, чтобы использовать rmsock, которые пытаются удалить его)? –  Olivier Dulac 18.09.2013, 07:05
  • 2
    @OlivierDulac: "В отличие от того, что подразумевает его имя, rmsock не удаляет сокет, если он используется процессом. Это просто сообщает о процессе, содержащем сокет". (ibm.com/developerworks/community/blogs/cgaix/entry / …) спасибо –  Vitor Py 26.09.2013, 17:18
  • 3
    @vitor-braga: А-ч Спасибо!, я думал, что он пробовал, но просто сказал, который процесс сдерживается, когда он не мог удалить его. По-видимому, это даже не пытается удалить его, когда процесс содержит его.Отлично! Спасибо! –  Olivier Dulac 26.09.2013, 19:00

Другой инструмент, доступный на Linux, является ss. Из ss страницы справочника на Fedora:

NAME
       ss - another utility to investigate sockets
SYNOPSIS
       ss [options] [ FILTER ]
DESCRIPTION
       ss is used to dump socket statistics. It allows showing information 
       similar to netstat. It can display more TCP and state informations  
       than other tools.

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

[root@box] ss -ap
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                    :::http                    :::*        users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN     0      128             127.0.0.1:munin                    *:*        users:(("munin-node",1278,5))
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",1175,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",1175,3))
LISTEN     0      10              127.0.0.1:smtp                     *:*        users:(("sendmail",1199,4))
LISTEN     0      128             127.0.0.1:x11-ssh-offset                  *:*        users:(("sshd",25734,8))
LISTEN     0      128                   ::1:x11-ssh-offset                 :::*        users:(("sshd",25734,7))
8
27.01.2020, 19:30

Для Соляриса можно использовать pfiles и затем grep sockname: или port:.

Образец (отсюда):

pfiles `ptree | awk '{print $1}'` | egrep '^[0-9]|port:'
3
27.01.2020, 19:30

Я был однажды сталкивающийся с попыткой определить, какой процесс был позади конкретного порта (на этот раз, это было 8000). Я попробовал множество lsof и netstat, но затем рискнул и попытался поразить порт через браузер (т.е. http://hostname:8000/). О чудо экран-заставка приветствовал меня, и стало очевидно, чем был процесс (для записи, это был Splunk).

Еще одна мысль: "PS-e-o pid, args" (YMMV) может иногда показывать номер порта в списке аргументов. Grep является Вашим другом!

2
27.01.2020, 19:30
  • 1
    В том же духе Вы могли telnet hostname 8000 и посмотрите, печатает ли сервер баннер. Однако это главным образом полезно, когда сервер работает на машине, где у Вас нет доступа оболочки и затем нахождения, что идентификатор процесса не релевантен. –  Gilles 'SO- stop being evil' 08.05.2011, 17:45

Теги

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