我正在逐行读取文本文件中 wireshark 转储的内容。我可以轻松挑选出的一件事是 wireshark 输出的特定行中使用的协议(protocol)(如下面的代码所示)。我遇到的问题是从线路中提取 ip 地址。正如您在下面的示例输出和我的代码中所看到的,提取协议(protocol)相当容易,因为它总是大写并且两边都有一个空格。但是,IP 地址并不统一,我也不太确定如何将它们拉出来。这主要是因为我不太确定 re.match()
的所有部分是如何工作的。有人可以帮我解决这个问题,并可能解释一下 re.match()
参数是如何工作的吗?
file = open('tcpdump.txt', 'r');
for line in file:
matchObj = re.match(r'(.*) TCP (.*?) .*', line, re.M)
示例 Wireshark 输出:
604 1820.381625 10.200.59.77 -> 114.113.226.43 TCP 54 ssh > 47820 [FIN, ACK] Seq=1848 Ack=522 Win=16616 Len=0
最佳答案
第一个正则表达式组是 greedy
(.*)
并且匹配所有内容,您可以通过添加 使其成为
,即:non-greedy
>?
file = open('tcpdump.txt', 'r');
for line in file:
matchObj = re.match(r"->\s(.*?)\s(\w+)\s(.*?)\s", line, re.M)
上面的例子将捕获包含远程地址114.113.226.43
、协议(protocol)TCP
和端口54的3组
分别。
关于python - 如何从字符串(Wireshark 输出)中提取某些子字符串(IP 地址)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928007/