Назад | Перейти на главную страницу

Регистрировать сетевой трафик с идентификатором процесса в Mac OS X?

Я хочу регистрировать весь сетевой трафик на сервере 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.

Я подумал, что оставлю эту дополнительную заметку на случай, если она кому-нибудь пригодится.