我有一个 IP 数据包,接口上有 x 字节的自定义标头。
有没有办法告诉 tcpdump 或 tshark 忽略前 x 个字节并解码和显示 IP 数据包?
我要做的最后一件事是编写一个自定义解剖器。
问问题
674 次
1 回答
1
因为这是(大概)Linux:
接口的驱动程序必须提供一个ARPHRD_
值来指定链路层标头的类型(所有 Linux 网络接口驱动程序都必须如此)。
如果该ARPHRD_
值对于该链路层标头类型是正确的,并且 libpcap 知道该ARPHRD_
值,它会将其映射到适当的DLT_
值,并且 tcpdump/*shark,如果他们理解该DLT_
值,将能够处理数据包。(如果没有,则必须添加支持 - 但我认为 tcpdump 和 *shark 支持DLT_
libpcap 可以为传输 IP 的接口提供的所有值)。
如果该ARPHRD_
值对于该链路层标头类型是正确的,并且 libpcap不知道该ARPHRD_
值,它将执行“熟”捕获,这意味着自定义标头将不会提供给 libpcap(假设驱动程序设置了skbuff 中的正确字段;如果不是,驱动程序有问题)并且 libpcap 将使用DLT_LINUX_SLL
并插入“Linux 熟模式捕获”标头。Tcpdump 和 *shark 处理DLT_LINUX_SLL
.
如果 Linux 尚未ARPHRD_
为该自定义标头定义值,则您可能必须定义自己的值;libpcap 不会知道它,并且会退回到“熟模式”捕获。
于 2013-01-30T04:44:18.103 回答