我在大学的一门课程(网络工程)中获得了一个项目,该项目涉及编写一个数据包嗅探器,它可以捕获和识别 IPv4、IPv6、TCP、UDP、IP、ICMP 等数据包并显示它们的内容。
最初我们被指示使用 libpcap 来执行此操作,但我们刚刚被一位大学技术人员告知,当前安装 (Arch linux) 无法使用 libpcap。
还有哪些其他方法可以在不使用 libpcap 的 C 中创建数据包嗅探器?
我不是在问这个项目的答案,我只是在问方向,我应该从哪里开始?
我在大学的一门课程(网络工程)中获得了一个项目,该项目涉及编写一个数据包嗅探器,它可以捕获和识别 IPv4、IPv6、TCP、UDP、IP、ICMP 等数据包并显示它们的内容。
最初我们被指示使用 libpcap 来执行此操作,但我们刚刚被一位大学技术人员告知,当前安装 (Arch linux) 无法使用 libpcap。
还有哪些其他方法可以在不使用 libpcap 的 C 中创建数据包嗅探器?
我不是在问这个项目的答案,我只是在问方向,我应该从哪里开始?
我会去问一个更高级的人你实际上应该做什么。这里似乎有两个完全不同的任务——一个是解析和显示网络数据包,另一个是与操作系统/硬件接口以捕获数据包。如果您应该学习前者,那么您可能不应该花时间在后者上。
最初我们被指示使用 libpcap 来执行此操作,但我们刚刚被一位大学技术人员告知,当前安装 (Arch linux) 无法使用 libpcap。
我建议的第一件事是从课程导师那里得到一个直接的答案。如果技术人员表示 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
,但其中任何一个都可以作为了解其工作方式的重要起点。不要害怕拆开这样的大项目——有人说“谷歌是你的朋友”。好吧,我认为grep
是你的朋友。
为什么不使用 WireShark?它有 ArchLinux 的软件包,使用起来非常有趣。我自己用过,效果很好。