Определение направления пакетов при сниффинге

Я хочу иметь список исходных IP-адресов исходящего трафика интерфейса. Как я могу найти направление пакета, будь то входящий или исходящий трафик чтения, используя libpcap? Я не знаю информации о подсети ни одной из сторон. И с обеих сторон есть клиенты/серверы, поэтому я не могу полагаться на диапазоны номеров портов для фильтрации трафика.

Почему в заголовке пакета libpcap нет информации о направлении или параметре фильтра, например inbound в pcap- фильтровать?


person Yasser    schedule 22.01.2013    source источник


Ответы (4)


Netsniff-NG, хотя и не полагается на libpcap, поддерживает расширения типов пакетов ядра Linux. Они задокументированы здесь

Один из типов пакетов является исходящим и комментируется как «исходящий любого типа». В следующем примере будут перехвачены все пакеты, покидающие ваш интерфейс.

$ netsniff-ng --in eth0 --out outgoing.pcap --type outgoing

Используя это, вы можете использовать другие инструменты командной строки для чтения файла PCAP и извлечения всех исходных адресов. Может быть что-то *nix-ey вроде этого:

$ tcpdump -nnr outgoing.pcap  | cut -d " " -f3 | cut -d . -f1-4

Примечание. Я не пробовал это на маршрутизаторе.

person jonschipp    schedule 25.04.2013

вы можете использовать «ether src» или «ether dst» для фильтрации направления пакетов. Это требует, чтобы вы знали MAC-адрес интерфейса.

person Community    schedule 15.06.2013

Формат файла PCAP не содержит поля, содержащего интерфейс, используемый во время захвата. При этом новый формат файлов PCAP-NG, который в настоящее время используется Wireshark и Tshark, поддерживает его вместе с направлением пакетов.

Существующие функции pcap-ng:

  • количество отброшенных пакетов
  • аннотации (комментарии)
  • локальный IP-адрес
  • интерфейс и направление
  • имя хоста ‹-> база данных IP-адресов

PcapNg

Похоже, вы записываете с маршрутизатора или брандмауэра, поэтому что-то вроде следующего не сработает.

ip-источник 192.168.1.1

Захват трафика в потоки может быть вариантом, но он все равно не предоставит вам информацию о направлении. Тем не менее, вы сможете легко определить исходный и конечный адреса. Если у вас уже есть pcap, вы можете преобразовать его в формат ARGUS:

argus -r capture.pcap -w capture.argus
ra -nnr capture.argus

Другие инструменты, некоторые с примерами, которые могут легко получить конечные точки/хосты:

ntop -f capture.pcap
tcpprof -nr capture.pcap

Конечные точки

инструменты потока

Вам придется разобрать нужную информацию, но я не думаю, что это слишком большая проблема. Я рекомендую взглянуть на PCAP-NG, если вы не можете работать с этим.

person jonschipp    schedule 22.01.2013
comment
pcap-ng поддерживает его, поскольку формат файла имеет место, где может размещаться направление. Однако это может быть размещено, а не будет размещено, и, поскольку libpcap/WinPcap в настоящее время вообще не предоставляет информацию об этом направлении, программы, использующие libpcap/WinPcap для захват, и которые могут писать pcap-ng, такие как Wireshark/TShark (и tcpdump OS X Mountain Lion), не имеют указателя направления для помещения в файл и, следовательно, не помещают его в файл. То есть pcap-ng недостаточно для решения всей проблемы. - person ; 23.01.2013
comment
Спасибо, что разъяснил, Гай. - person jonschipp; 23.01.2013
comment
Спасибо. Значит, нет возможности захватить трафик в формате pcap-ng? Я хочу написать код на C, используя libpcap. Должен ли я реализовать это самостоятельно? Легко ли добавить эту функцию в libpcap? У меня есть некоторые базовые знания программирования на C. Кто знает направление? Драйвер сетевой карты? - person Yasser; 23.01.2013
comment
С помощью libpcap невозможно получить направление захваченных пакетов. Вы можете сохранять захваченные пакеты в pcap или pcap-ng или любом другом формате, для которого у вас есть или вы можете использовать код для записи пакетов, но вы не можете вывести информацию о направлении, потому что у вас ее нет. - person ; 24.01.2013
comment
Вам придется добавить новые интерфейсы в libpcap, чтобы получить информацию о направлении, поскольку текущие API не имеют механизма для предоставления этой информации. Это означает, что его нелегко добавить. - person ; 24.01.2013
comment
Драйвер знает направление, но libpcap не общается с драйвером напрямую; он взаимодействует с механизмом захвата, зависящим от ОС, с которым взаимодействует драйвер. Некоторые из них предоставляют информацию о направлении, некоторые нет (сокеты PF_PACKET в Linux предоставляют, а BPF — нет). - person ; 24.01.2013
comment
Спасибо Гай. Я нашел здесь, что libpcap уже исправлено добавлением поля в pcap_pkthdr. Я работаю над Linux, и это то, что я хочу, временный обходной путь. Но ссылка на патч недоступна. Не могли бы вы подсказать, как мне найти или написать такой же патч? - person Yasser; 24.01.2013

Вы можете выбрать направление, в котором будут перехватываться пакеты, вызывая pcap_setdirection() до pcap_loop().

Например, для захвата входящих пакетов достаточно написать:

handle = pcap_open_live("eth0", 65535, 1, 0, errbuf);
pcap_setdirection(handle, PCAP_D_IN);
pcap_loop(handle, -1, process_packet, NULL);

Возможные направления: PCAP_D_IN, PCAP_D_OUT, PCAP_D_INOUT.

См. tcpdump.org/manpages/pcap_setdirection.3pcap.txt.

person Vitalii Blagodir    schedule 11.12.2016