захват сетевого пакета в c

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


person REALFREE    schedule 22.09.2011    source источник
comment
на основе Linux/Unix, извините, что не упомянул ОС   -  person REALFREE    schedule 22.09.2011
comment
нашел хороший учебник для этого, если кому-то нужно :) yuba.stanford.edu/~casado /pcap/section1.html   -  person REALFREE    schedule 22.09.2011


Ответы (2)


Если вы используете систему на базе UNIX[*], то простейшим механизмом является libpcap, который является частью tcpdump проект.

Вашему процессу потребуются привилегии root для доступа к сетевому интерфейсу (как и в случае с необработанными сокетами).

Обычно вам приходится самостоятельно декодировать фреймы Ethernet, IP-заголовки и т. д., хотя для большинства протоколов это не так уж сложно.

[*] На самом деле он доступен и для Win32, но я сам не использовал его под Windows.

person Alnitak    schedule 22.09.2011
comment
да, если у вас нет ОС с более тонкими разрешениями, которые позволяют определенным учетным записям пользователей получать доступ к обычно привилегированным вызовам API. - person Alnitak; 23.09.2011

Вы должны использовать необработанный сокет. Вот пример. По крайней мере, в том, что касается операционных систем Linux и Unix. Я не знаю о винде.

person Heisenbug    schedule 22.09.2011