我的 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()”调用获得的信息,其中包括数据包的源地址,但不包括目标地址,所以你看到的唯一链路层地址是源地址。
它还包括一些指示如何接收数据包的标志:
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/