我已经获得了一个大学课程项目(网络工程),其中涉及编写可捕获和识别IPv4,IPv6,TCP,UDP,IP,ICMP等数据包的数据包嗅探器并显示其内容。在linux中使用数据包嗅探而不使用libpcap
最初我们被指示使用libpcap来做到这一点,但刚刚有一位大学技术人员告诉我们,当前安装(Arch linux)无法使用libpcap。
还有什么其他方法可以在C中创建不使用libpcap的数据包嗅探器?
我不是要求这个项目的答案,我只是要求方向,我应该从哪里开始?
我已经获得了一个大学课程项目(网络工程),其中涉及编写可捕获和识别IPv4,IPv6,TCP,UDP,IP,ICMP等数据包的数据包嗅探器并显示其内容。在linux中使用数据包嗅探而不使用libpcap
最初我们被指示使用libpcap来做到这一点,但刚刚有一位大学技术人员告诉我们,当前安装(Arch linux)无法使用libpcap。
还有什么其他方法可以在C中创建不使用libpcap的数据包嗅探器?
我不是要求这个项目的答案,我只是要求方向,我应该从哪里开始?
我会去问别人更高级的你其实应该做什么。这里似乎有两个完全不同的任务 - 一个是解析和显示网络数据包,另一个是与OS /硬件接口以捕获数据包。如果你应该了解前者,那么你可能不应该花时间在后者上。
最初我们被指示使用libpcap来做到这一点,但刚刚有一位大学技术人员告诉我们,当前安装(Arch linux)不可能使用libpcap。
我建议的第一件事是从课程导师得到一个直接的答案。如果技术人员意味着libpcap不可用,那么很好,你应该能够编译它。如果技术人员意味着他们(Arch或者大学)从Linux内核中删除混杂模式的驱动程序,那么你可以做的不是很多。无论哪种方式,检查你听到的是什么。
如果您仍需要这样做,阅读libpcap源文件以获得指导有什么问题? pcap_loop
是你正在寻找的功能,它从pcap_t
结构中调用read_op
。 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
结果,但任何这些将作为伟大的出发点制定出它是如何工作的。不要害怕拆分这样的大项目 - 别人说“谷歌是你的朋友”。那么我认为grep
是你的朋友。
+1,我完全同意。 – 2011-07-18 22:11:30
是的,事实证明,重点是解析和显示。因此,我们被告知只需从tcpdump转储原始输出,然后使用我们的程序对其进行解析。 – DanielGibbs