2013-07-17 6 views
0

Я написал приложение, которое использует libpcap для захвата пакетов. Но приложение может захватывать только несколько пакетов, трафик составляет около нескольких килобайт в секунду. Но захваченный трафик будет превышать 10 Мбит/с, если tcpdump будет открыт. Когда tcpdump закрыт, захваченный трафик снова падает до нескольких килобайт.Приложение с libpcap может захватывать только все пакеты при открытии tcpdump или только захватить несколько пакетов, как их разрешить? Спасибо

Кто-нибудь знает почему? Большое спасибо.

+0

Где код? –

+0

извините, кода нет на этом компьютере. Я использую pcap_loop для захвата пакетов так же, как tcpdump. – happy

ответ

0

Если вы звоните pcap_open_live(), вы, вероятно, передаете 0 в качестве аргумента '' promisc ''. Если вы звоните pcap_create() и pcap_activate(), вы, вероятно, не вызываете между этими вызовами (или передаете a '' promisc '' аргумент 0).

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

+0

Спасибо за ваш ответ. Я использую pcap_open_live, но я передаю 1 как аргумент «promisc». – happy

+0

Итак, вы делаете что-то вроде 'pcap_open_live ({adapter}, 65535, 1, 1000, errbuf)', так что третий аргумент равен 1? –

+0

Да, третий аргумент равен 1. – happy