Linux 从.pcap文件中计算唯一MAC地址

Linux 从.pcap文件中计算唯一MAC地址,linux,terminal,packet,pcap,tcpdump,Linux,Terminal,Packet,Pcap,Tcpdump,我试图生成一个shell命令,该命令将使用tcpdump读取给定的.pcap文件,并输出给定的.pcap文件中唯一的MAC地址数 再加上“tcp--help”这句话就没用了: 到目前为止,我得到了这个 tcpdump-r mypcap.pcap乙醚-v`dst ff:ff:ff:ff`|uniq-c 任何帮助都将不胜感激Wireshark的TShark命令行实用程序可能会工作得更好,因为它允许对数据包的输出格式进行更多的控制 例如,你可以这样做 tshark -r mypcap.pcap -T

我试图生成一个shell命令,该命令将使用tcpdump读取给定的.pcap文件,并输出给定的.pcap文件中唯一的MAC地址数

再加上“tcp--help”这句话就没用了: 到目前为止,我得到了这个

tcpdump-r mypcap.pcap乙醚-v`dst ff:ff:ff:ff`|uniq-c


任何帮助都将不胜感激

Wireshark的TShark命令行实用程序可能会工作得更好,因为它允许对数据包的输出格式进行更多的控制

例如,你可以这样做

tshark -r mypcap.pcap -T fields -E separator=, -e eth.src -e eth.dst
对于以太网捕获,它将为每个数据包打印数据包的源MAC地址和目标MAC地址,中间带有逗号

要引用我的机器上的
uniq
手册页:

如果输入中的重复行不相邻,则不会检测到它们,因此可能需要首先对文件进行排序

因此,接下来应该将
tshark
的输出通过管道传输到
sort

但是,在这种情况下,
sort
将进行排序,
uniq
将使用
-c
检查唯一性和计数,这是源地址和目标地址对。01:02:03:04:05:06至06:05:04:03:02:01将被视为与06:05:04:03:02:01至01:02:03:04:05:06不同。这可能不是你想要的

如果您想要源MAC地址的计数,而不关心目标MAC地址,请执行以下操作

tshark -r mypcap.pcap -T fields -e eth.src | sort | uniq -c
tshark -r mypcap.pcap -T fields -e eth.dst | sort | uniq -c
这可能是确定网络上存在哪些地址的最佳方法;您网络上的机器可能正在向不在您网络上的目标地址发送数据包(可能地球上任何地方都不存在或从地球上发射),因此目标地址可能不是您想要的。另一方面,如果你的网络上有一台机器具有该目标地址,并且它不费心在网络上发送任何数据包,那么如果你只查看源地址,它就不会出现;然而,这不太可能,即使这不是不可能的。(例如,它不会响应ARP数据包,这使得网络上的其他机器不太可能(尽管并非不可能)知道其MAC地址,从而使其MAC地址成为目标地址的可能性(尽管并非不可能)降低。)

对于目标MAC地址,请执行以下操作:

tshark -r mypcap.pcap -T fields -e eth.src | sort | uniq -c
tshark -r mypcap.pcap -T fields -e eth.dst | sort | uniq -c
如果两者都需要,则需要使用换行符作为源地址和目标地址之间的分隔符,将它们放在单独的行上,这样
sort
将对源地址和目标地址进行排序,
uniq
将查找唯一的地址。至少如果使用与Bourne兼容的shell(Bourne shell、Korn shell a/k/a ksh、Bourne shell a/k/a bash等)和


是的,这是第一个引号之后的一个换行符,紧跟在换行符之后的另一个引号。

Wireshark的TShark命令行实用程序可能会工作得更好,因为它允许对数据包的输出格式进行更多的控制

例如,你可以这样做

tshark -r mypcap.pcap -T fields -E separator=, -e eth.src -e eth.dst
对于以太网捕获,它将为每个数据包打印数据包的源MAC地址和目标MAC地址,中间带有逗号

要引用我的机器上的
uniq
手册页:

如果输入中的重复行不相邻,则不会检测到它们,因此可能需要首先对文件进行排序

因此,接下来应该将
tshark
的输出通过管道传输到
sort

但是,在这种情况下,
sort
将进行排序,
uniq
将使用
-c
检查唯一性和计数,这是源地址和目标地址对。01:02:03:04:05:06至06:05:04:03:02:01将被视为与06:05:04:03:02:01至01:02:03:04:05:06不同。这可能不是你想要的

如果您想要源MAC地址的计数,而不关心目标MAC地址,请执行以下操作

tshark -r mypcap.pcap -T fields -e eth.src | sort | uniq -c
tshark -r mypcap.pcap -T fields -e eth.dst | sort | uniq -c
这可能是确定网络上存在哪些地址的最佳方法;您网络上的机器可能正在向不在您网络上的目标地址发送数据包(可能地球上任何地方都不存在或从地球上发射),因此目标地址可能不是您想要的。另一方面,如果你的网络上有一台机器具有该目标地址,并且它不费心在网络上发送任何数据包,那么如果你只查看源地址,它就不会出现;然而,这不太可能,即使这不是不可能的。(例如,它不会响应ARP数据包,这使得网络上的其他机器不太可能(尽管并非不可能)知道其MAC地址,从而使其MAC地址成为目标地址的可能性(尽管并非不可能)降低。)

对于目标MAC地址,请执行以下操作:

tshark -r mypcap.pcap -T fields -e eth.src | sort | uniq -c
tshark -r mypcap.pcap -T fields -e eth.dst | sort | uniq -c
如果两者都需要,则需要使用换行符作为源地址和目标地址之间的分隔符,将它们放在单独的行上,这样
sort
将对源地址和目标地址进行排序,
uniq
将查找唯一的地址。至少如果使用与Bourne兼容的shell(Bourne shell、Korn shell a/k/a ksh、Bourne shell a/k/a bash等)和


是的,第一个引号后是一个换行符,紧跟在换行符后是另一个引号。

如果您只想计算捕获文件中存在的唯一以太网MAC地址的数量,那么我同意@user13951124的观点,即对于此用例,使用是更好的工具选择。在这里,我提出了一个使用tshark
-z端点eth
选项的替代解决方案

例如,我有一个包含2个唯一以太网MAC地址的文件,当我运行以下命令时:

tshark.exe -nqr mypcap.pcap -z endpoints,eth
我得到以下输出:

AST modules loaded
================================================================================
Ethernet Endpoints
Filter:<No Filter>
                       |  Packets  | |  Bytes  | | Tx Packets | | Tx Bytes | | Rx Packets | | Rx Bytes |
00:26:b9:b3:ce:7a              2          1072          2            1072           0               0
00:12:17:b5:0d:32              2          1072          0               0           2            1072
================================================================================
在这种情况下,您得到的输出只是:

2
我猜这是