Как установить libpcap на linux

Обновлено: 07.07.2024

Старая статья, снифер на С с использованием libpcap

Послушаем?

Libpcap.

Библиотека libpcap предоставляет следующие базовые функции:

В качестве фильтра можно использовать следующие выражения:

pcap_compile(handle, &fp, "ip proto tcp", 0, net);
pcap_setfilter(handle, &fp);

Для перехвата пакетов библиотека libpcap предоставляет два пути. Первый считывать один пакет в момент времени используя функцию pcap_next() или организовать цикл с использованием функции pcap_loop().

. . . .
struct pcap_pkthdr *header;
const u_char *packet;

В бой.

Вооружившись этой информацией можно приступать к программированию.

Функция handle_tcp()(см. 108), также будет иметь тип void. В строке 111, обьявляется указатель на структуру *tcp, для хранения TCP заголовка. Далее идет определение переменной data для хранения данных передаваемых в пакете. В строках 113, 114 выполняем вычисление суммы длинн ethernet и ip заголовков, которую присваеваем переменной iplen, и длинна этих заголовков, плюс длинна tcp заголовка, и присваиваем переменной tcplen. Далее вырезаем TCP заголовок (см. 116). Теперь выводим интересующую нас информацию (см. 117, 118).

Если кроме информации из ethernet, ip, tcp и так далее заголовков нам необходимо увидеть передаваемые данные, то необходимо в вызове функции handle_tcp() из фукции handle_ip()(см. 102) добавить еще один параметр, длинну пакета(ip->ip_len), и соответсвенно изменить прототип фукции handle_tcp() добавив параметр u_int16_t len (см. 108). Эта информация необходима, чтобы вычислить размер передаваемых данных (см. 120). Вырезать данные из пакета можно налогично тому как, это мы делали с ethernet, ip, tcp заголовками ранее. Поскольку в полученных данных будут непечатаемые символы, то просто распечатать содержание *data не получится, кроме этого, хотелось, что бы вывод данных был красиво структурирован. Для этого можно воспользоваться фукцией ascii_print_with_offset()(см. 40-80), эта функция заимствована мной из исходников tcpdump, разработчиками tcpdump из кода NetBSD.

Заключение.

Как видите создать простой снифер с использованием библиотеки libpcap дело нескольких минут. К тому же этот снифер будет работать и на Linux и на Solaris и на FreeBSD, на любой системе на которую перенесена libpcap.

Читайте также: