Wireshark 的 TShark 命令行实用程序可能会更好地工作,因为它可以更好地控制数据包的输出格式。
例如,你可以这样做
tshark -r mypcap.pcap -T fields -E separator=, -e eth.src -e eth.dst
对于以太网捕获,它将为每个数据包打印数据包的源 MAC 地址和目标 MAC 地址,它们之间用逗号分隔。
引用我机器上的 uniq 手册页:
如果输入中的重复行不相邻,则不会被检测到,因此可能需要先对文件进行排序。
所以接下来您应该将tshark 的输出通过管道传输到sort。
但是,在这种情况下,sort 将进行排序,uniq 将检查唯一性并与-c 一起计数,是源地址和目标地址的对。从 06:05:04:03:02:01 到 01,01:02:03:04:05:06 到 06:05:04:03:02:01 将被计为不同: 02:03:04:05:06。这可能不是你想要的。
如果您想要源 MAC 地址的计数,而不关心目标 MAC 地址,请执行
tshark -r mypcap.pcap -T fields -e eth.src | sort | uniq -c
这可能是确定网络中存在哪些地址的最佳方法;您网络上的一台机器可能正在向您网络上的目标地址发送数据包(并且可能在地球上的任何地方都不存在或从地球发射),因此目标地址可能不是您的想。另一方面,如果您的网络上有一台具有该目标地址的机器,并且它不费心在网络上发送任何数据包,那么如果您只查看源地址,它就不会出现;但是,即使不是不可能,也不太可能出现这种情况。 (例如,它不会响应 ARP 数据包,这使得网络上的其他机器不太可能(尽管并非不可能)知道它的 MAC 地址,因此虽然并非不可能,但它的 MAC 地址不太可能(尽管并非不可能)地址将是一个目标地址。)
对于目的地 MAC 地址,执行
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-again shell a/k/a bash 等)和
tshark -r mypcap.pcap -T fields -E separator='
' -e eth.src -e eth.dst | sort | uniq -c
是的,这是第一个引号之后的换行符,而换行符之后是另一个引号。