2011-07-18 58 views
0

我已经获得了一个大学课程项目(网络工程),其中涉及编写可捕获和识别IPv4,IPv6,TCP,UDP,IP,ICMP等数据包的数据包嗅探器并显示其内容。在linux中使用数据包嗅探而不使用libpcap

最初我们被指示使用libpcap来做到这一点,但刚刚有一位大学技术人员告诉我们,当前安装(Arch linux)无法使用libpcap。

还有什么其他方法可以在C中创建不使用libpcap的数据包嗅探器?

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

回答

5

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

+0

+1,我完全同意。 – 2011-07-18 22:11:30

+0

是的,事实证明,重点是解析和显示。因此,我们被告知只需从tcpdump转储原始输出,然后使用我们的程序对其进行解析。 – DanielGibbs

3

最初我们被指示使用libpcap来做到这一点,但刚刚有一位大学技术人员告诉我们,当前安装(Arch linux)不可能使用libpcap。

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

如果您仍需要这样做,阅读libpcap源文件以获得指导有什么问题? pcap_loop是你正在寻找的功能,它从pcap_t结构中调用read_opgrep -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是你的朋友。