gpt4 book ai didi

linux - Wireshark/tcpdump/libpcap 在 Linux 内核中的何处拦截数据包?

转载 作者:太空狗 更新时间:2023-10-29 11:31:43 27 4
gpt4 key购买 nike

根据 this ,wireshark 能够在数据包被丢弃之前获取数据包(因此我无法自己获取此类数据包)。而且我仍然想知道 wireshark 在 linux 内核中的确切位置以获取数据包。

答案是“在 UN*Xes 上,它使用 libpcap,而在 Linux 上,它使用 AF_PACKET 套接字。”有没有人有更具体的例子来使用“AF_PACKET 套接字”?如果我正确理解 wireshark,网络接口(interface)卡 (NIC) 将复制所有传入的数据包并将其发送到用户定义的过滤器(berkeley 数据包过滤器)。但这发生在哪里?还是我的理解有误,我是否遗漏了这里的任何内容?

提前致谢!

最佳答案

But where does this happen?

如果我没理解错的话——你想知道这样的套接字在哪里初始化。
pcap_create function ,它会尝试确定源接口(interface)的类型,创建它的副本并激活它。
对于网络,请参阅 pcap_create_interface function => pcap_create_common function => pcap_activate_linux function .
所有初始化都发生在 pcap_activate_linux => activate_new function => iface_bind function
(使用 handlep->device = strdup(device); 复制设备描述符,
使用 socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL)) 创建套接字,
使用 bind(fd, (struct sockaddr *) &sll, sizeof(sll)) 将套接字绑定(bind)到设备。
有关更多详细信息,请阅读所提及函数的源文件中的注释 - 它们非常详细。
初始化后,所有工作都发生在一组 functions 中。如pcap_read_linux

关于linux - Wireshark/tcpdump/libpcap 在 Linux 内核中的何处拦截数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com