我的 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>

请注意,dest IP 因为这个“P”的东西而改变。

最佳答案

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

Linux“任何”设备使用 DLT_LINUX_SLL/LINKTYPE_LINUX_SLL 链路层 header ,其中包括您从 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 地址的网络上设置了“组”位)或它所在的适配器的地址已收到。它在“任何”设备上检测到混杂接收的数据包有点令人惊讶,因为“任何”设备本身无法进入混杂模式,但也许接收该数据包的特定接口(interface)处于混杂模式出于某种其他原因。

    关于networking - 使用以太网 header 了解 tcpdump 跟踪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7579668/

    10-15 12:30