Обнюхивание пакетов в Linux без использования libpcap - PullRequest
0 голосов
/ 19 июля 2011

Мне дали проект для курса в университете (сетевое проектирование), который включает в себя написание анализатора пакетов, который может собирать и идентифицировать пакеты IPv4, IPv6, TCP, UDP, IP, ICMP и т. Д. И отображать их содержимое.

Первоначально нам было поручено использовать libpcap для этого, но один из технических специалистов университета только что сообщил нам, что невозможно использовать libpcap с текущей установкой (Arch linux).

Какие еще есть способы создания анализатора пакетов в C, который не использует libpcap?

Я не спрашиваю ответ на этот проект, я просто спрашиваю направление, с чего мне начать?

Ответы [ 3 ]

5 голосов
/ 19 июля 2011

Я бы пошел и спросил кого-то более старшего, что вы на самом деле должны делать. Похоже, здесь есть две совершенно разные задачи: одна выполняет анализ и отображение сетевых пакетов, а другая взаимодействует с ОС / оборудованием для захвата пакетов. Если вы должны изучать первое, то, вероятно, вам не следует тратить время на второе.

3 голосов
/ 19 июля 2011

Первоначально нам было предписано использовать libpcap для этого, но один из технических специалистов университета только что сообщил нам, что невозможно использовать libpcap с текущей установкой (Arch linux).

Первое, что я бы посоветовал, это получить прямой ответ от преподавателя курса. Если технический специалист означает, что libpcap недоступен, хорошо, вы должны быть в состоянии скомпилировать его. Если техник означает, что они (Arch или университет) удалили драйверы для разных режимов из ядра Linux, вы не сможете сделать многое. В любом случае, проверьте, что вы слышите.

Если вам все еще нужно это сделать, что не так с чтением исходного кода libpcap для руководства? pcap_loop - это функция, которую вы ищете, которая вызывает read_op из структуры pcap_t. grep -irn "read_op = " * показывает несколько возможных читателей на низком уровне в libpcap:

grep -irn "read_op = " *
pcap-bpf.c:2231:    p->read_op = pcap_read_bpf;
pcap-bt-linux.c:172:    handle->read_op = bt_read_linux;
pcap.c:243: p->read_op = (read_op_t)pcap_not_initialized;
pcap-can-linux.c:99:    handle->read_op = can_read_linux;
pcap-dag.c:795: handle->read_op = dag_read;
pcap-dlpi.c:759:    p->read_op = pcap_read_dlpi;
pcap-libdlpi.c:217: p->read_op = pcap_read_libdlpi;
pcap-linux.c:1198:  handle->read_op = pcap_read_linux;
pcap-linux.c:3167:  handle->read_op = pcap_read_linux_mmap;
pcap-netfilter-linux.c:338: handle->read_op = nflog_read_linux;
pcap-nit.c:315: p->read_op = pcap_read_nit;
pcap-pf.c:486:  p->read_op = pcap_read_pf;
pcap-septel.c:213:  handle->read_op = septel_read;
pcap-sita.c:941:    handle->read_op = pcap_read_acn;
pcap-snf.c:236: p->read_op = snf_read;
pcap-snit.c:394:    p->read_op = pcap_read_snit;
pcap-snoop.c:381:   p->read_op = pcap_read_snoop;
pcap-usb-linux.c:341:           handle->read_op = usb_read_linux_mmap;
pcap-usb-linux.c:355:       handle->read_op = usb_read_linux_bin;
pcap-usb-linux.c:390:       handle->read_op = usb_read_linux;
pcap-win32.c:687:       p->read_op = pcap_read_win32_dag;
pcap-win32.c:694:       p->read_op = pcap_read_win32_npf;
savefile.c:323: p->read_op = pcap_offline_read;

То, что ваша система использует, вероятно, зависит от результата configure, но любой из них послужит хорошей отправной точкой для выяснения того, как она работает. Не бойтесь разбирать большие проекты, подобные этим, - кто-то другой сказал: «Google - твой друг». Ну, я думаю grep твой друг.

0 голосов
/ 19 июля 2011

Почему вы не используете WireShark? У него есть пакеты для ArchLinux и с ним действительно весело работать. Я сам использовал его с благоприятными результатами.

https://wiki.archlinux.org/index.php/Wireshark

...