2015-02-16 2 views
0

Я смотрел самый простой учебник по созданию крошечного сетевого сниффера и found this one. Я последовал его, но метод рекомендуется нюхать пакетов:Sniffing весь сетевой трафик в C

sock_raw = socket(AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;; 
while(1) 
{ 
    data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size); 
} 

С рациональным:

сокеты если положить в цикле recvfrom принимает все входящие пакеты. Это связано с тем, что он не привязан к конкретному адресу или порту.

Мне показалось, что это будет контролировать только сетевой трафик, поступающий и выходящий из моего компьютера, а не всей локальной сети. Тест-тест подтвердил мою интуицию.

Верно ли это? Может ли этот метод только обнюхивать пакеты, входящие и выходящие из моего ноутбука?

Какой подход следует использовать для обнюхивания всего сетевого трафика (то есть: netsniff-ng, Wireshark)?

Я хочу избежать использования libpcap в этом случае.

+0

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

ответ

2

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

Но компьютер может сказать, что переключатель переходит в «promiscuous mode». Это позволит настроить порт коммутатора для отправки вам копии каждого пакета, который видит коммутатор. Существует два улова:

  1. Коммутатор по-прежнему не может видеть пакеты, которые другие коммутаторы/маршрутизаторы не отправляют на него. Промежуточный режим не распространяется - в противном случае вы бы быстро получили копию каждого пакета, отправленного через Интернет в любом месте. Даже Google или NSA не могли справиться с этим видом трафика.

  2. Если ваш коммутатор не является вилкой &, то ваш системный администратор отключит эту функцию.

[EDIT] Wireshark использует libpcap, который является низкоуровневой библиотекой, которая делает все от настройки сетевого устройства для извлечения и фильтрации пакетов, которые он может видеть. Поэтому вы должны попытаться найти исходный код этой библиотеки, чтобы лучше понять, как это делается.

Похожие:

  • FedEx Bandwidth: Когда - если когда-либо - будет пропускная способность Интернета превзойти FedEx?
+0

С Wireshark В настоящее время я могу видеть, как взаимодействует с моим вторым компьютером HTTP-взаимодействие с удаленным сервером (обратите внимание, что мой главный и второй компьютеры находятся на WiFi, что, вероятно, я вижу весь трафик). Поскольку я могу контролировать этот «разговор» с Wireshark, я пытаюсь понять, как я могу воспроизвести это с помощью сырых сокетов. – Juicy

+0

@Juicy: Первое, что нужно сделать, чтобы ваш сокет в «беспорядочный режим»; без этого он не покажет вам пакеты, которые являются средствами для другого MAC-адреса. Я не могу прокомментировать часть «raw socket or not»; но если вы хотите перехватить какой-либо пакет, для меня имеет смысл сырой сокет. –

+0

Тем не менее, Wireshark является проектом OSS, поэтому должен быть источник где-то :-) Загрузите его, затем вы увидите, как они это делают. –

Смежные вопросы