Анализ трафика сетевой карты на си в linux

всем привет использую для анализа трафика библиотеку libpcap, может кто с ней работал, можете объяснить кое что в её работе. В этой либе есть функция pcap_loop(..) она срабатывает когда в pcap появляется новый пакет (насколько я понял). Возможно ли разграничить пакеты на те что пришли из вне и те что отправляю я ???? Или всё зависит от того к какому интерфейсу я подключаюсь? Если так то к какому я подключаюсь по дефолту ? Если несу фигню поправьте.


Ответы (1 шт):

Автор решения: eri

libpcap захватывает пакеты с фильтром беркли bpf.

Повесь ether src host <MAC> и будут только исходящие пакеты.

struct bpf_program fp;
char filter_exp[] = "ether src host 1c:af:f7:08:21:2b";   
char dev[] = "enp2s0";

pcap_t *handle;
handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);

pcap_compile(handle, &fp, filter_exp, 0, 0)

pcap_setfilter(handle, &fp)

pcap_loop(handle, -1, (pcap_handler) got_packet, NULL);

А устройство указываешь параметром dev в pcap_open_live.

Узнать направление на лету похоже нельзя

struct pcap_pkthdr { 
 struct timeval ts; /* time stamp */
 bpf_u_int32 caplen; /* length of portion present */
 bpf_u_int32 len; /*
 length this packet (off wire) */ 
};

Без фильтра нпверное также будет проще по src mac, но сравнивать при разборе пакета.

А ещё можно сделать 2 захвата с разными фильтрами

→ Ссылка