在不使用libpcap的情况下在linux中进行数据包嗅探

时间:2011-07-18 21:54:41

标签: c libpcap packet-sniffers

我获得了大学(网络工程)课程的项目,该项目涉及编写数据包嗅探器,可以捕获和识别IPv4,IPv6,TCP,UDP,IP,ICMP等数据包并显示其内容。

最初我们被指示使用libpcap来做这件事,但我们刚刚被一位大学技术人员告知,目前的安装(Arch linux)不可能使用libpcap。

在C中创建不使用libpcap的数据包嗅探器有哪些其他方法?

我不是要求这个项目的答案,我只想问方向,我应该从哪里开始?

3 个答案:

答案 0 :(得分:5)

我会去问更高级的人你应该做的事情。这里似乎有两个完全不同的任务 - 一个是解析和显示网络数据包,另一个是与OS /硬件接口以捕获数据包。如果你应该学习前者,那么你可能不应该花时间研究后者。

答案 1 :(得分:3)

  

最初我们被指示使用libpcap来做这件事,但我们刚刚被一位大学技术人员告知,目前的安装(Arch linux)不可能使用libpcap。

我建议的第一件事就是从课程导师那里得到一个直接的答案。如果技术人员意味着libpcap不可用,那么你应该能够编译它。如果技术人员意味着他们(Arch或大学)从Linux内核中删除了混杂模式驱动程序,那么你就无法做很多事情。无论哪种方式,检查你听到的是什么。

如果您仍然需要这样做,那么阅读libpcap源以获得指导有什么问题? pcap_loop是您正在寻找的功能,它从read_op结构中调用pcap_tgrep -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的结果,但其中任何一个都将成为了解其工作原理的重要起点。不要害怕拆开像这样的大项目 - 有人说“谷歌是你的朋友”。我认为grep是你的朋友。

答案 2 :(得分:-1)

为什么不使用WireShark?它有ArchLinux包,非常有趣。我自己用它并取得了不错的成绩。

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