Изменить версию libpcap на macOS (функция Apple удалена) - PullRequest
0 голосов
/ 31 октября 2019

Я просто хочу использовать tcpdump с той же функциональностью -Qout, которая доступна в Ubuntu.

В macOS tcpdump и libpcap лишены функциональности для фильтрации с -Qout.

tcpdump -Qout -nnSX -c 10 -w packet.pcap port XXXX
tcpdump: cannot parse term at: 
tcpdump: invalid expression "out"

У меня есть сборка tcpdump (./configure, make, make install) и PATH=/usr/local/sbin:$PATH. Когда я проверяю с помощью

tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1

Теперь, если я пробую тот же дамп, я получаю другое сообщение:

tcpdump --direction=out -nnSX -c 10 -w packet.pcap port XXXX
tcpdump: en0: pcap_setdirection() failed: Setting direction to PCAP_D_OUT is not supported on BPF

Я также скачал исходный код для libpcap-1.9.0 и попытался собратьэто так же (./configure, make, make install).

clang: error: linker command failed with exit code 1 (use -v to see     
invocation)
make: *** [libpcap.dylib] Error 1

Мне нужно каким-то образом собрать и связать libpcap-1.9.0 с tcpdump 4.9.3, поэтому, когда я использую tcpdump, он будет использовать libpcap 1.9.0.

EDIT: я установилlibpcap 1.9.1 с brew и экспортировал путь с

  echo 'export PATH="/usr/local/opt/libpcap/bin:$PATH"' >> ~/.bash_profile

, но он все еще показывает мне, что он связан с системным значением по умолчанию 1.8.1

tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1

1 Ответ

1 голос
/ 08 ноября 2019

Это более точно описывается как «Apple никогда не реализовывал функцию».

Базовый механизм захвата в macOS называется «BPF», для «Berkeley Packet Filter»;Первоначально он был разработан одним из сотрудников Лаборатории Лоуренса в Беркли, который создал libpcap и tcpdump (Van Jacobson). Он предоставляется различными ОС BSD, включая FreeBSD, NetBSD, OpenBSD и DragonFly BSD - и macOS.

В BPF FreeBSD и NetBSD была добавлена ​​функция, позволяющая программе конфигурировать ее для захвата только входящих пакетов, толькоисходящие пакеты или как входящие, так и исходящие;OpenBSD имеет аналогичную функцию (с некоторыми различиями в деталях, поэтому мне нужно вернуться и добавить поддержку для этого в libccap tcpdump.org).

macOS, однако, никогда не реализовывал эту функцию. (По сути, это то, что «PCAP_D_OUT не поддерживается в BPF», хотя это сообщение об ошибке, вероятно, следует изменить на то, что не использует имена из API libpcap, поскольку пользователи могут не знать, что такое «PCAP_D_OUT».)

(О, и tcpdump от Apple использует -Q для своих собственных целей, поэтому им придется сделать хак, чтобы использовать его для направления и для фильтрации метаданных. К счастью, tcpdump также поддерживает --direction =, поэтому Apple может, по крайней мере, использовать это, если они когда-либо реализуют функцию направления в BPF.)

...