Я хочу регистрировать весь сетевой трафик на сервере Mac OS X (как это делает tcpdump), но включая идентификатор ответственного процесса. Использование lsof дает мне только текущие соединения, а не прошлые.
Есть ли способ сделать это?
С уважением, Йохен
В то время nettop
удобен для просмотра снимка текущих подключений, вы можете использовать tcpdump
для сбора данных и обработки информации. С участием tcpdump
используйте опцию -k
для отображения метаданных захваченного трафика.
-k Control the display of packet metadata via an optional metadata_arg argument. This is useful when displaying packet saved
in the pcap-ng file format or with interfaces that support the PKTAP data link type.
By default, when the metadata_arg optional argument is not specified, any available packet metadata information is
printed out.
The metadata_arg argument controls the display of specific packet metadata information using a flag word, where each
character corresponds to a type of packet metadata as follows:
I interface name (or interface ID)
N process name
P process ID
S service class
D direction
C comment
This is an Apple modification.
Так, например, отображая идентификатор процесса и имя процесса, вы можете сделать это:
tcpdump -k NP
У меня недавно тоже была эта проблема. Один из возможных подходов - использовать как tcpdump, так и неттоп параллельно (каждый, бок о бок, в своих собственных терминальных оболочках) и визуально наблюдать, как проявляется сетевой трафик.
Например, мой брандмауэр недавно обнаружил подозрительно выглядящий сетевой трафик, исходящий из Ethernet моего Mac, в частной подсети, которую я не узнал, и на порте (TCP 7000), который выглядел необычно. В одной терминальной оболочке я запустил:
$ sudo tcpdump port 7000
а в другой оболочке терминала я запустил:
$ sudo nettop -m tcp
Когда сетевой трафик появился через tcpdump, он почти сразу же был добавлен в вывод nettop, что указывало на то, что в этом примере это был демон-помощник Apple AirPlay, работающий с идентификатором процесса (PID) 87:
AirPlayXPCHelpe.87
Это не обязательно может быть практичным для наблюдения за всеми ситуациями, когда вы пытаетесь поймать что-то в своей сети, что выглядит аномально, но в качестве отправной точки, возможно, стоит попробовать написать, вероятно, более сложный сценарий DTrace.
К сожалению, лучший способ сделать это (tcpsnoop, который использует DTrace для выполнения именно того, что вы описываете) не работает в реализации dtrace в Mac OS X. Вам понадобится какой-то брандмауэр приложений (Маленький снитч например), но это больше относится к настольному / однопользовательскому режиму, чем к тому, что вы хотите запустить на своем сервере.
На самом деле это кажется странным требованием, вы пытаетесь создать систему обнаружения вторжений или просто выяснить, что вызывает доступ к сети?
Я только что впервые пошел по этому пути. Я обнаружил, что DTrace, хотя и мощный, сейчас сложно реализовать из-за системы SIP. У меня установлен Little Snitch для обычных целей брандмауэра, но я также хотел начать регистрацию данных.
Никто здесь не упомянул, что у неттопа есть режим регистрации, который будет выводиться в CSV, и, в конечном счете, это то, к чему я хотел бы добраться. Это похоже на подход tcpdump -k NP. Однако это не требовало от меня выполнения команды sudo.
Я подумал, что оставлю эту дополнительную заметку на случай, если она кому-нибудь пригодится.