3

我的 tcpdump 日志中有两个数据包,我不知道第二列中的“P”和“In”是什么意思。有人可以解释他们的意思吗?

00:43:44.896482   P 00:00:ac:12:80:01 ethertype IPv4 (0x0800), length 76: 172.18.128.1.ssh > 155.xx.xx.xx.56365: S 1308033114:1308033114(0) ack 1315850475 win 5792 <mss 1460,sackOK,timestamp 12196173 122040733,nop,wscale 8>

00:43:44.896482  In 00:00:ac:12:80:01 ethertype IPv4 (0x0800), length 76: 172.18.128.1.ssh > 155.yy.yy.yy.4242: S 1308033114:1308033114(0) ack 1315850475 win 5792 <mss 1460,sackOK,timestamp 12196173 122040733,nop,wscale 8>

请注意,由于这个“P”的事情,dest IP 会发生变化。

4

1 回答 1

5

从 Guy Harris 的 tcpdump-workers 邮件列表中得到以下答案。

Linux“任何”设备使用 DLT_LINUX_SLL/LINKTYPE_LINUX_SLL 链路层标头,其中包括您从 PF_PACKET 套接字上的“recvfrom()”调用获得的信息,其中包括数据包的源地址,但不包括目标地址,所以你看到的唯一链路层地址是源地址。

它还包括一些指示如何接收数据包的标志:

  • "In" - 数据包单播到主机;

  • "B" - 数据包被广播;

  • "M" - 数据包不是广播的,而是多播的;

  • “P” - 数据包单播到其他主机,并且该主机接收到它,因为网络适配器处于混杂模式;

  • “Out” - 数据包由主机发送并“环绕”并传递到 PF_PACKET 套接字。

Linux网络堆栈确定“In”、“B”、“M”和“P”之间差异的方式,我认为是通过查看数据包的目标地址并查看它是否是广播地址(ff: ff:ff:ff:ff:ff 在使用 IEEE MAC-48 地址的网络上)、多播地址(在使用 IEEE MAC-48 地址的网络上设置了“组”位)或它所在的适配器的地址已收到。它在“任何”设备上检测到混杂接收的数据包有点令人惊讶,因为“任何”设备本身不能进入混杂模式,但可能接收到该数据包的特定接口处于混杂模式出于某种其他原因。

于 2011-09-28T20:22:25.690 回答