Say*_*nan 2 networking wireshark linux-kernel wifi
Linux 熟捕获头有什么用?当我在特定接口上进行数据包捕获时,我从设备获取此标头。
Linux 的熟捕获标头及其原因可能在 Wireshark wiki SLL页面上得到了最好的描述,为方便起见,在此处引用:
Linux 熟模式捕获 (SLL)
这是 Linux 上的 libpcap 使用的伪协议,用于从“任何”设备捕获以及在本机链路层标头不可用或无法使用的某些设备上捕获。(例如,Linux PPP 代码不能可靠地向 libpcap 提供 PPP 标头 - 它通常不存在,这意味着数据包类型不可用,或者在某些但不是所有数据包中包含额外的随机垃圾,就像某些数据包上发生的那样PPP-over-ISDN 接口 - 因此 SLL 伪链路层用于 PPP 接口。它用于“任何”设备,因为并非机器上的所有接口都必须具有相同的链路层类型,但是,为了捕获过滤器要工作,接口上的所有数据包必须具有相同类型的链路层标头。)
在 Linux 中,当从“任何”设备或其他设备之一捕获时,libpcap不会为真正的“硬件协议”(如以太网)提供链路层标头,而是提供一个假的链路层标头对于这个伪协议。
(对于那些好奇的人来说,“SLL”代表“sockaddr_ll”;“cooked 模式”下的捕获是通过从 PF_PACKET/SOCK_DGRAM 套接字而不是通常用于捕获的 PF_PACKET/SOCK_RAW 套接字读取来完成的。使用 SOCK_DGRAM 而不是 SOCK_RAW 意味着Linux 套接字代码不提供数据包的链路层标头。这意味着诸如链路层协议的数据包类型字段(如果有)之类的信息不可用,因此 libpcap 从在套接字上执行 a 时提供的地址recvfrom()。在 PF_PACKET 套接字上,该地址的类型为sockaddr_ll,其中“ll”大概代表“链路层”;该结构中的字段以 开头sll_。packet(7)有关更多信息,请参阅 Linux 系统上的手册页细节。)