Как использовать необработанный сокет для прослушивания только нужного трафика?

Три связанных вопроса:

  1. Имеют ли необработанные сокеты какой-либо метод фильтрации, эквивалентный встроенному в ядро ​​BPF (используемому libpcap)?

  2. Означает ли открытие необработанного сокета, что он получает каждый IP-пакет на машине?

  3. Как iptables взаимодействует с необработанными сокетами — видит ли необработанный сокет пакеты, которые отбрасывает iptables?

BPF – http://lwn.net/Articles/599755/


person fadedbee    schedule 29.07.2014    source источник
comment
После небольшого чтения, похоже, вы выбираете, какой IP-протокол (UDP/TCP/ICMP) слушать.   -  person fadedbee    schedule 29.07.2014


Ответы (1)


  1. Имеют ли необработанные сокеты какой-либо метод фильтрации, эквивалентный встроенному в ядро ​​BPF (используемому libpcap)?

Что ж, они это делают, и это более чем эквивалентно: они сами поддерживают фильтры BPF. Вы бы прикрепили сокет следующим образом:

 setsockopt(socket, SOL_SOCKET, SO_ATTACH_FILTER, &bpf_filter, sizeof(bpf_filter));

этот вопрос есть полный пример).

За последние несколько лет BPF претерпел множество изменений в Linux, и теперь вы можете подключать его к различным хукам для работы в сети: к сокетам, а также к входным/выходным интерфейсам tc, XDP (на сетевых адаптерах с совместимыми драйверами). Также: kprobes, точки трассировки, перформанс-события, контрольные группы и многое другое… для трассировки/мониторинга.

Я не достаточно уверен, чтобы ответить на вопросы 2 и 3, извините.

person Qeole    schedule 03.12.2016