Я ищу список всех портов, которые в настоящее время прослушивает PID.
Как бы вы посоветовали мне получить такие данные о процессе?
Я ищу список всех портов, которые в настоящее время прослушивает PID.
Как бы вы посоветовали мне получить такие данные о процессе?
Ответы:
Вы можете использовать ss
из пакета iproute2 (который похож на netstat
):
ss -l -p -n | grep "pid=1234,"
или (для более старой версии iproute2):
ss -l -p -n | grep ",1234,"
Замените 1234 на PID программы.
-u
или -t
для UDB или TCP только. : +1: И все они могут быть сложены следующим образом:, ss -tlnp
И чтобы исключить вывод ширины заливки, что, как я нахожу, раздражает, вы можете ss -tlnp | cat
ss -nlp | cat
, это примерно, покажи мне процессы прослушивания (-l), их номера портов (-n) и информацию о своих процессах (-p), и не пытайтесь приспособить вывод к моей оболочке | cat
( или меньше или что угодно). Мне потребовалось два года, чтобы привыкнуть к этому: D
Я не знаю, как использовать iproute2
инструменты. Но как обходной путь, вы можете попробовать это.
lsof -Pan -p PID -i
должен дать вам информацию, которую вы ищете.
Выход
lsof -Pan -p 27808 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 27808 apache 5u IPv6 112811294 0t0 TCP *:80 (LISTEN)
httpd 27808 apache 7u IPv6 112811298 0t0 TCP *:8443 (LISTEN)
httpd 27808 apache 9u IPv6 112811303 0t0 TCP *:443 (LISTEN)
Я получил эту команду отсюда, но не уверен в точной ссылке, так как все они записаны в записной книжке. Но вы также можете проверить оттуда.
Вы можете использовать netstat
для этого, чтобы выяснить pid каждого процесса прослушивания.
netstat - печать сетевых подключений, таблиц маршрутизации, статистики интерфейса, маскарадных подключений и многоадресного членства
-a, --all Показать сокеты как для прослушивания, так и для не прослушивания (для TCP это означает установленные соединения). С опцией --interfaces показывать интерфейсы, которые не помечены
--numeric, -n Показывать числовые адреса вместо попыток определить символические имена хоста, порта или пользователя.
-p, --program Показать PID и имя программы, которой принадлежит каждый сокет.
Вот пример:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1507/rpcbind
tcp 0 0 0.0.0.0:51188 0.0.0.0:* LISTEN 1651/rpc.statd
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN 1680/ypbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1975/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1763/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2081/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2119/mongod
tcp 0 48 172.16.33.73:22 172.16.127.110:51850 ESTABLISHED 25473/sshd
tcp 0 0 172.16.33.73:22 172.16.127.110:51214 ESTABLISHED 24699/sshd
tcp 0 0 :::111 :::* LISTEN 1507/rpcbind
tcp 0 0 :::9200 :::* LISTEN 1994/java
tcp 0 0 :::9300 :::* LISTEN 1994/java
tcp 0 0 :::22 :::* LISTEN 1975/sshd
tcp 0 0 ::1:631 :::* LISTEN 1763/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2081/master
tcp 0 0 :::59162 :::* LISTEN 1651/rpc.statd
netstat
это устарело с помощью инструментов iproute2, и я стараюсь этого избежать.
Ответ @ jofel показывает вам подходящий инструмент, ss
вот замены для других сетевых инструментов в iproute2.
Устаревшие команды и их эквиваленты iproute2 следующие:
deprecated replacement(s)
========== ==============
- arp ip n (ip neighbor)
- ifconfig ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel ip tunnel
- iwconfig iw
- nameif ip link, ifrename
- netstat ss, ip route (for netstat-r), ip -s link (for netstat -i),
ip maddr (for netstat-g)
- route ip r (ip route)
Основной список также здесь, в Википедии: http://en.wikipedia.org/wiki/Iproute2 .
Другой способ, lsof
если вы не знаете PID, а просто название программы:
lsof -Pa -p $(pgrep [programName]) -i
lsof
4.89 на Ubuntu 16.04
pgrep <program name>
затем выберите PID, который вам нужен для вышеуказанной команды. замена $(pgrep [programName])
на PID #
ss
фильтрация по PID отсутствует, за исключением сокетов netlink.