Macos tcpdump仅显示输入或输出mac地址,如何同时显示?

Macos tcpdump仅显示输入或输出mac地址,如何同时显示?,macos,centos7,tcpdump,Macos,Centos7,Tcpdump,我的操作系统版本:CentOS Linux 7.5.1804版(核心版) 我的tcpdump版本: tcpdump: option requires an argument -- 'V' tcpdump version 4.9.2 libpcap version 1.5.3 OpenSSL 1.0.2k-fips 26 Jan 2017 当命令为tcpdump-i any-e-nn时,输出如下: 15:55:07.876878 **In 00:50:56:c0:00:08** ether

我的操作系统版本:CentOS Linux 7.5.1804版(核心版)

我的tcpdump版本:

tcpdump: option requires an argument -- 'V'
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  
26 Jan 2017
当命令为tcpdump-i any-e-nn时,输出如下:

15:55:07.876878  **In 00:50:56:c0:00:08** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386448815 ecr 0,sackOK,eol], length 0
15:55:07.876939 **Out 00:50:56:28:6d:20** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386448815 ecr 0,sackOK,eol], length 0
15:55:15.878019  **In 00:50:56:c0:00:08** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386456815 ecr 0,sackOK,eol], length 0
15:55:15.878083 **Out 00:50:56:28:6d:20** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386456815 ecr 0,sackOK,eol], length 0
13:58:58.699758 **00:50:56:c0:00:08 > 00:0c:29:cb:e2:ab**, ethertype IPv4 (0x0800), length 78: 172.16.248.1.61179 > 172.16.248.101.80: Flags [S], seq 1223964422, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 383603998 ecr 0,sackOK,eol], length 0
13:58:59.703124 **00:50:56:c0:00:08 > 00:0c:29:cb:e2:ab**, ethertype IPv4 (0x0800), length 78: 172.16.248.1.61179 > 172.16.248.101.80: Flags [S], seq 1223964422, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 383604999 ecr 0,sackOK,eol], length 0
13:59:00.709878 **00:50:56:c0:00:08 > 00:0c:29:cb:e2:ab**, ethertype IPv4 (0x0800), length 78: 172.16.248.1.61179 > 172.16.248.101.80: Flags [S], seq 1223964422, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 383605999 ecr 0,sackOK,eol], length 0
我们可以看到输出只包含“in”或“out”mac地址,而不是两者都包含。

然而,在macOS中,我的tcpdump版本是:

tcpdump: option requires an argument -- V
tcpdump version tcpdump version 4.9.2 -- Apple version 83.200.2
libpcap version 1.8.1 -- Apple version 79.200.4
LibreSSL 2.2.7
输出如下:

15:55:07.876878  **In 00:50:56:c0:00:08** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386448815 ecr 0,sackOK,eol], length 0
15:55:07.876939 **Out 00:50:56:28:6d:20** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386448815 ecr 0,sackOK,eol], length 0
15:55:15.878019  **In 00:50:56:c0:00:08** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386456815 ecr 0,sackOK,eol], length 0
15:55:15.878083 **Out 00:50:56:28:6d:20** ethertype IPv4 (0x0800), length 80: 172.16.248.1.61944 > 172.16.248.101.80: Flags [S], seq 448335523, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386456815 ecr 0,sackOK,eol], length 0
13:58:58.699758 **00:50:56:c0:00:08 > 00:0c:29:cb:e2:ab**, ethertype IPv4 (0x0800), length 78: 172.16.248.1.61179 > 172.16.248.101.80: Flags [S], seq 1223964422, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 383603998 ecr 0,sackOK,eol], length 0
13:58:59.703124 **00:50:56:c0:00:08 > 00:0c:29:cb:e2:ab**, ethertype IPv4 (0x0800), length 78: 172.16.248.1.61179 > 172.16.248.101.80: Flags [S], seq 1223964422, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 383604999 ecr 0,sackOK,eol], length 0
13:59:00.709878 **00:50:56:c0:00:08 > 00:0c:29:cb:e2:ab**, ethertype IPv4 (0x0800), length 78: 172.16.248.1.61179 > 172.16.248.101.80: Flags [S], seq 1223964422, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 383605999 ecr 0,sackOK,eol], length 0
我们可以看到输出同时包含“in”和“out”mac地址

所以,我的问题是,如何让Centos中的tcpdump像我的macOS一样显示mac地址?即,同时显示“输入”和“输出”mac地址


(我认为他没有名声,所以在OP中添加)

十六进制输出的一个示例是:

23:26:49.169360 In 00:50:56:c0:00:08 ethertype IPv4 (0x0800), length 68: 172.16.248.1.62593 > 172.16.248.101.2020: Flags [.], ack 14720436, win 1983, options [nop,nop,TS val 568496069 ecr 131615210], length 0

0x0000:  0000 0001 0006 **0050 56c0 0008** 0000 0800
0x0010:  4548 0034 837c 0000 4006 ae77 ac10 f801
0x0020:  ac10 f865 f481 07e4 55d8 41fc 6751 69a6
0x0030:  8010 07bf bdd9 0000 0101 080a 21e2 8fc5
0x0040:  07d8 49ea
23:26:49.171185 Out 00:0c:29:cb:e2:ab ethertype IPv4 (0x0800), length 4200: 172.16.248.101.2020 > 172.16.248.1.62593: Flags [P.], seq 14732048:14736180, ack 10297, win 380, options [nop,nop,TS val 131615212 ecr 568496070], length 4132

0x0000:  0004 0001 0006 **000c 29cb e2ab** 0000 0800
0x0010:  4512 1058 d695 4000 4006 0b70 ac10 f865
0x0020:  ac10 f801 07e4 f481 6751 9702 55d8 41fc
0x0030:  8018 017c 58d3 0000 0101 080a 07d8 49ec
0x0040:  21e2 8fc6 e771 c1f5 87f2 15e9 9b2a c2cd
0x0050:  dfce 5048 7123 1656 3fea eda7 ca39 d65c
0x0060:  3a6c b571 d6c2 5fad d39e 1605 4df6 946f
0x0070:  5657 7ef3 b85b dd66 48a7 bcd7 3567 a54f

您可以尝试使用
-xx
-xx
选项

由于tcpdump最初是专门为查看网络层及以上(IP及以上…TCP、UDP、ICMP)而创建的,因此其默认行为自然是仅解码和显示这些层

虽然
-e
选项将添加链路层信息,特别是如果您有更多以太网变体,您可能看不到所需的所有信息。如果使用
-xx
-xx
选项,则这些选项将显示从帧头开始的帧原始字节,而不是从网络层头开始显示


使用这些选项,您可以自己手动解码帧头,不隐藏任何内容。

您似乎被配置为在
LINUX\u SLL
Cooked
模式下使用
tcpdump
。这有一个完全不同的帧头,只显示目标MAC,因为源用于保存:

 2 byte packet type
 2 byte ARP_HRD type
 2 byte address length
您可以阅读有关此格式的更多信息


解决此问题并查看两个MAC地址的最简单方法是使用
-i
实际选择一个接口,而不是依赖
任何
选项,该选项将始终被烹调。

-xx或-xx选项仅以十六进制格式显示输出,这并不能解决我的问题。实际上,它解决了问题。您想查看两个MAC地址。这显示了原始以太网帧,其中包含两个MAC地址。我比较了CentOS和macOS的十六进制输出,它们是不同的。CentOS十六进制输出仅包含一个mac地址,而macOS输出包含两个mac地址。您是说以太网帧在CentOS上只有一个mac地址吗?这不可能是真的。因为输出太长,我已将输出粘贴到新答案中。您可以从输出中看到,它实际上只包含一个mac地址。非常感谢您,David。这真的解决了我的问题。但是,如果我不使用“-I any”选项,如何捕获所有接口的通信量?这是另一个问题的一个很好的主题。:)我建议您研究Linux中的接口绑定选项,它允许您将多个接口视为单个接口。或者,您需要在每个接口上独立运行tcpdump。您可以在以后使用类似于
mergecap
的方法交错这些数据。因此,我认为
tcpdump
仅在
LINUX\u SLL
模式下显示源标题。