数据包捕获是否绕过TCP/IP堆栈的一部分?
当我在Linux上使用数据包捕获是否绕过TCP/IP堆栈的一部分?,tcp,wireshark,packet,packet-sniffers,Tcp,Wireshark,Packet,Packet Sniffers,当我在Linux上使用wireshark或tcpdump捕获网络数据包时,它通常会保存分段的TCP,而wireshark可以重新组合这些数据包(只要编辑->首选项->协议…为协议(例如HTTP)选中此选项) 但是,我认为TCP/IP堆栈会在将数据包交付给用户应用程序(例如WEB浏览器)之前重新组装数据包 所以我的问题是:捕获数据包是否绕过了TCP/IP堆栈的某些部分?简短回答:是 更长的回答:“数据包捕获”不会干扰正常的数据包处理——它只是在数据包通过内核的位置复制数据包。这种情况通常发生在设备
wireshark
或tcpdump
捕获网络数据包时,它通常会保存分段的TCP
,而wireshark
可以重新组合这些数据包(只要编辑->首选项->协议…为协议(例如HTTP)选中此选项)
但是,我认为TCP/IP堆栈会在将数据包交付给用户应用程序(例如WEB浏览器)之前重新组装数据包
所以我的问题是:捕获数据包是否绕过了TCP/IP堆栈的某些部分?简短回答:是
更长的回答:“数据包捕获”不会干扰正常的数据包处理——它只是在数据包通过内核的位置复制数据包。这种情况通常发生在设备驱动程序和网络堆栈之间,但根据过滤设置的不同,也可能发生在其他位置。请参阅libpcap使用的套接字类型,并参阅
PF_PACKET
的说明。感谢您的反馈。“取决于筛选设置的方式”是指netfilter规则可以在TCP/IP处理数据包并重定向到PF_SOCKET后拾取数据包?这取决于您的操作系统及其启用的功能—但在TCP处理后,只有一个没有“数据包”概念的字节流,因此实际上没有“数据包筛选”方法,但您可以使用ptrace来接收用户级进程从套接字中获得的内容。@标记,如果您使用netfilter
来发送数据包到用户空间,并使用libipq
处理数据包,则您将看不到片段<与大多数防火墙一样,code>netfilter,需要对重新组装的数据包进行操作才能有效地进行过滤。