Linux 从.pcap文件中计算唯一MAC地址
我试图生成一个shell命令,该命令将使用tcpdump读取给定的.pcap文件,并输出给定的.pcap文件中唯一的MAC地址数 再加上“tcp--help”这句话就没用了: 到目前为止,我得到了这个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
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
我猜这是