Этот вопрос может показаться глупым, потому что я знаю, что существует множество фреймворков, которые сделают это за вас. То, что я хочу, - это на самом деле глубоко взаимодействовать с C API низкого уровня и иметь возможность написать программу, которая сидит на компьютере и перехватывает пакеты между локальной машиной и внешним пространством. Я попытался выяснить это, просмотрев открытый исходный код (например, tcpdump), но мне довольно сложно выяснить, какой файл на самом деле выполняет анализ сети. Мы ценим любые предложения !
захват сетевого пакета в c
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
да, если у вас нет ОС с более тонкими разрешениями, которые позволяют определенным учетным записям пользователей получать доступ к обычно привилегированным вызовам API.
- person Alnitak; 23.09.2011
Вы должны использовать необработанный сокет. Вот пример. По крайней мере, в том, что касается операционных систем Linux и Unix. Я не знаю о винде.
person
Heisenbug
schedule
22.09.2011