Linux熟化数据包捕获

时间:2018-07-16 08:54:40

标签: networking linux-kernel wifi wireshark

Linux熟捕获头有什么用?当我在特定接口上捕获数据包时,会从设备获取此标头。

1 个答案:

答案 0 :(得分:0)

Linux熟捕获头文件及其原因可能最好在Wireshark Wiki SLL页上进行描述,为方便起见,在此引用:

Linux熟模式捕获(SLL)

这是Linux上libpcap用来从“任何”设备捕获并在某些本机链路层头不可用或无法使用的设备上捕获的伪协议。 (例如,Linux PPP代码无法可靠地向libpcap提供PPP标头-通常不存在,这意味着数据包类型不可用,或者在某些数据包中但并非所有数据包中都包含额外的随机乱码,就像某些情况下发生的那样PPP-over-ISDN接口-SLL伪链路层用于PPP接口,它在“任何”设备上使用,因为并非计算机上的所有接口都必须具有相同的链路层类型,但是为了捕获过滤器才能正常工作,接口上的所有数据包都必须具有相同类型的链路层标头。)

在Linux中从“任何”设备或其他设备之一进行捕获时,libpcap不会像{{3}那样提供真正的“硬件协议”的链路层头。 },而是为此伪协议提供了伪造的链路层头。

(对于好奇的人,“ SLL”代表“ sockaddr_ll”;通过“熟模式”捕获是通过从PF_PACKET / SOCK_DGRAM套接字而不是通常用于捕获的PF_PACKET / SOCK_RAW套接字中读取来完成的。使用SOCK_DGRAM比SOCK_RAW表示Linux套接字代码不提供数据包的链路层标头,这意味着诸如链路层协议的数据包类型字段(如果有)之类的信息不可用,因此libpcap构造了一个合成的链路层在套接字上执行Ethernet时提供的地址的标头在PF_PACKET套接字上,该地址的类型为sockaddr_ll,其中“ ll”大概表示“链接层”;该结构中的字段以sll_开头。有关更多详细信息,请参见Linux系统上的recvfrom()手册页。)