关于网络:Linux Cooked Capture in Packets

Linux Cooked Capture in Packets

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


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

Linux熟模式捕获(SLL)

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

在Linux中从"任何"设备或其他设备之一进行捕获时,libpcap不提供真正的"硬件协议"(如以太网)的链接层头,而是提供伪造的链接层头这个伪协议。

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