Tcpdump:如何捕获虚拟接口上的传出数据包?

Tcpdump:如何捕获虚拟接口上的传出数据包?

在我现在正在测试的 Linux 系统上,它有几个链接在一起的虚拟 L2 设备来添加/操作我们自己的帧头,这些帧头封装在 Eth 头和 IP 头之间。

现在,这就是“tcpdump -xx -i virtual_if_1”显示的捕获的传出数据包

tcpdump: WARNING: xxxtype 1000 not supported by libpcap - falling back to cooked socket
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virtual_if_1, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

20:20:25.558423 IP 0.0.0.0.52368 > 5.5.2.2.telnet: S 3501169179:3501169179(0) win 35848 <mss 17924,sackOK,timestamp 17386889 0,nop,wscale 8>
    0x0000:  0004 03e8 0006 0000 0000 1b9a 0000 0800
    0x0010:  4510 003c d792 4000 4006 5c13 0000 0000
    0x0020:  0505 0202 cc90 0017 d0af 9a1b 0000 0000
    0x0030:  a002 8c08 0735 0000 0204 4604 0402 080a
    0x0040:  0109 4d89 0000 0000 0103 0308`

从 0x0010 开始,它是来自 L3 的 IP 标头,但 0x0000-0x000f 是伪造的,它不是该虚拟设备应该添加到 L3 标头的标头。看起来 tcpdump 会自动向其中添加一个虚构的以太网标头?是因为上面的警告,lipcap不支持该类型吗?

tcpdump 从哪里获取这些数据呢?是来自sk_buff->data吗?

谢谢

答案1

我想我找到了答案,它确实是由 libcap 作为伪协议添加的

Linktype_SLL 标头格式

SLL的wireshark描述

相关内容