предотвращение захвата libpcap пакетов, введенных с помощью pcap_inject()

в настоящее время думаю о возможности прослушивания того же интерфейса, используя только pcap, а также вводить пакеты с помощью pcap_inject.

Эта вещь может быть легко решена с помощью:

  • постоянное отслеживание контрольной суммы /большая медленная карта/,
  • отслеживание контрольной суммы — пока не будут введены все данные, скажем, первый http-запрос;
  • взлом bpf/libipq/Netfilter для переноса дополнительных параметров для каждого реального PHY-пакета

Но:

pcap слушает eth0 /реальная ситуация ближе к «pcap слушает и отбрасывает с помощью магии источника»/, pcap отправляет пакеты через дескриптор eth0, чтобы их можно было перенаправить. Какова теоретическая основа для того, чтобы libpcap не перехватывал пакеты, которые были введены в тот же интерфейс с использованием одной и той же библиотеки - например, внедренные пакеты не проходят через весь код фильтра пакетов Беркли?

Практический тест подлежит уточнению.


person kagali-san    schedule 08.12.2010    source источник


Ответы (2)


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

ether dst aa:bb:cc:dd:ee:ff 

... или это захватывает все, кроме того, что отправляется на соответствующий интерфейс:

not ether src aa:bb:cc:dd:ee:ff

Это повлияет на трафик с вашей машины, отличный от того, который вы вставляете, но если вы захватываете и вставляете, то вам, вероятно, все равно не нужны пакеты вашей собственной машины. Если вам нужно что-то более индивидуальное, вам не составит труда идентифицировать пакеты, которые вы только что отправили, в захваченных пакетах. (Я полагаю, это то, что вы имеете в виду под контрольной суммой, но я не вижу непосредственной проблемы с таблицей.)

person Christian    schedule 22.12.2010
comment
Это гениально просто :) получи свою награду. Другой парень снова упомянул подсистему skbuff, не заходя так далеко.. - person kagali-san; 23.12.2010
comment
Вы также можете использовать pcap_setdirection(p, PCAP_D_IN), если хотите видеть только пакеты, полученные на интерфейсе. Обратите внимание, однако, что это будет означать не только то, что вы не будете видеть пакеты, которые вы вводите, это также означает, что вы не будете видеть пакеты, которые ваша машина передает через обычный сетевой стек, но то же самое верно, если вы используете фильтр на адрес источника Ethernet. - person ; 05.08.2013

Возможно, просто игнорируйте пакеты со свойством skb->pkt_type == PACKET_OUTGOING в пути приема.

person user502515    schedule 22.12.2010
comment
...если вы используете Linux. Если вы не используете Linux, вам придется использовать какой-то другой механизм. - person ; 05.08.2013