![Как постоянно отслеживать PID, подключающиеся к локальным сокетам?](https://rvso.com/image/168802/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D0%BE%20%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D1%82%D1%8C%20PID%2C%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%8E%D1%89%D0%B8%D0%B5%D1%81%D1%8F%20%D0%BA%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%BC%20%D1%81%D0%BE%D0%BA%D0%B5%D1%82%D0%B0%D0%BC%3F.png)
Некоторыйлокальные процессыподключаемся и отключаемся от 127.0.0.1 через порт 1234.
Я хотел бы регистрировать все соединения с этим портом (или с серверным процессом).
я пробовал
ss -tpn | grep 1234
Он показывает список, но затем останавливается; он не регистрирует новые соединения, поэтому я не могу получить сокеты или PID владельца.
Какой инструмент можно использовать для определения PID подключаемых и отключаемых розеток?
решение1
есть инструмент «watch», который это делает, или вы можете
while true; do sleep 2; clear; ss -tulnp | grep 1234 ; done
добавить код в файл и отслеживать его. Это, вероятно, приведет к увеличению использования процессора, но может помочь вам с тем, что вы ищете.
Команда Linux watch
решение2
connect
Для мониторинга событий TCP в Linux можно использовать два инструмента :
- tcpconnect.pyв инструментах скрытой копии (pkgs.org,извинение)
- tcpconnect.btв bpftrace (pkgs.org,извинение)
Разница между ними заключается в том, что первый предоставляет возможности для настройки вывода (например, фильтрацию по PID или номеру порта), тогда как последний является более упрощенным инструментом и не предоставляет дополнительных опций.
В вашем случае самым простым вариантом будет установить bcc и запустить:
tcpconnect.py -P 1234
Если вы устанавливаете эти инструменты с помощью менеджера пакетов вашего дистрибутива, имейте в виду, что некоторые дистрибутивы не помещают tcpconnect
их /usr/bin
и помещают их в другое место, например /usr/share
. Поэтому обязательно проверьте, куда ваш дистрибутив помещает эти файлы, если вы не можете их найти.
решение3
Хотя ss
выводит только статистику сокетов, а вам нужно будет имитировать непрерывные дампы (с помощью цикла watch
или while
), netstat
имеет непрерывный режим ( -c
).
netstat -ntcp | grep ' 127.0.0.1:1234'
Обратите внимание, что два пробела перед 127... — это не опечатка, если вам нужно захватить только клиентский pid.
Пример вывода:
$ netstat -ntcp | grep ' 127.0.0.1:1234'
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:35720 127.0.0.1:1234 ESTABLISHED 22655/nc
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:35720 127.0.0.1:1234 ESTABLISHED 22655/nc
tcp 0 0 127.0.0.1:50146 127.0.0.1:1234 ESTABLISHED 21274/nc
решение4
watch -n 1 -d 'lsof -n -itcp:1234'
не ведение журнала, а мощный мониторинг в реальном времени с подробным описанием...
$ man watch
- -n 1 - каждую 1 секунду
- -d — Выделить различия
$ man lsof
- -n - не разрешать IP-адреса доменам.
- -itcp:1234 - любой взаимодействует с портом tcp 1234