
В выводе nmap -p- localhost
я получаю неизвестный открытый порт tcp, который меняется при каждой перезагрузке. Как мне определить, какой процесс его открыл и прослушивает через него. Я перепробовал много обычных инструментов ( netstat
, ss
, lsof
), но не могу найти виновника. Например, sudo netstat -pan -Ainet | grep <PORT>
не выдает PID/имя программы:
tcp 0 0 0.0.0.0:<PORT> 0.0.0.0:* LISTEN -
Может быть, мне следует проанализировать последовательность запуска? Но как это?
Может ли кто-нибудь помочь?
решение1
Какнамекнул на, ss
также может предоставить ответ; синтаксис следующий:
sudo ss --tcp --listening --processes 'sport = 1234'
Где 1234
находится порт дня из вашего сканирования nmap. Это ограничивает вывод портами TCP и показывает имя процесса и PID, который прослушивает этот порт. sudo
требуется только в том случае, если вам нужен --process
флаг, который предоставляет имя процесса и PID.
решение2
Netstat делает именно то, что вы просите, если запустить его от имени root и с правильными флагами:
sudo netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1931/dnsmasq
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 32296/cupsd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 1550/postgres
tcp6 0 0 :::80 :::* LISTEN 3198/docker-proxy
Кроме того, ss
является заменой netstat
и принимает в основном те же флаги, но имеет другой формат вывода
решение3
Некоторые порты, открытые ядром и некоторыми определенными службами (NFS, OCFS, туннели ssh), не видны ни netstat, ни ss