does packet capturng bypass part of TCP/IP stack?
当我在Linux上使用wireshark或tcpdump捕获网络数据包时,通常会保存分段的TCP,wireashark可以重新组合(只要Edit-> Preferences-> Protocols ...具有此选项)检查协议,例如HTTP)。
但是,我认为TCP / IP协议栈会在将数据包交付给用户应用程序之前重新组装数据包,例如WEB浏览器。
所以我的问题是:捕获数据包是否绕过TCP / IP堆栈的某些部分?
- 关于套接字libpcap使用的类型,请参见此内容,并在此处参见PF_PACKET的说明。
简短答案:是
更长的答案:"数据包捕获"不会干扰正常的数据包处理-它只是在数据包通过内核时对其进行复制。发生这种情况的通常位置是在设备驱动程序和网络堆栈之间,但是根据您设置过滤的方式,它也可能发生在其他位置。
- 感谢您的反馈。"取决于您的过滤设置方式"是指netfilter规则可以在TCP / IP处理完数据包并将其重定向到PF_SOCKET之后提取数据包?
-
它取决于您的操作系统及其启用的功能-但是在TCP处理之后,只有字节流没有"包"的概念,因此实际上并没有"包过滤"的方式那,但是您可以使用ptrace来了解从套接字获取的用户级进程。
-
@Mark,如果您使用netfilter来例如将数据包发送到用户空间并使用libipq处理它们,那么您将看不到碎片。与大多数防火墙一样,netfilter需要对重组后的数据包进行操作以进行有效过滤。