在Python中使用正则表达式查找IP地址

0 投票
4 回答
2810 浏览
提问于 2025-04-17 05:03

我正在尝试解析TSHARK捕获的结果。

这是我正在过滤的那一行:

Internet Protocol, Src: 10.10.52.250 (10.10.52.250), Dst: 224.0.0.2 (224.0.0.2)

我想提取源地址(Src)和目标地址(Dst),

这是我用来做到这一点的代码:

str(re.search("Src:\s[0-9\.]{7-15}", a, re.I|re.M).group())[5:]
str(re.search("Dst:\s[0-9\.]{7-15}", a, re.I|re.M).group())[5:]

但是每次运行这个代码时,我都没有匹配到结果。不过,当我在正则表达式中使用IP地址的确切长度时,它就能正常工作。比如:

str(re.search("Src:\s[0-9\.]{9}", a, re.I|re.M).group())[5:]

这样就没问题。那我该怎么解决这个问题呢?

4 个回答

2

这段代码看起来不太好:

text = 'fasga@fas#2*^127.0.0.1tfgws5151'

pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
pattern_re = re.compile(pattern)
ip_address = pattern_re.findall(text)
3

在查看Python正则表达式的使用指南时,难道不应该是{7,15}吗?

3
for match in re.finditer(r"\((\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))\b\)", subject):

这个正则表达式应该可以匹配任何IPv4的IP地址。实际的IP地址会被捕捉到第一组。

虽然你的正则表达式可能能用,但它有点危险,因为像999.999.999.999这样的地址并不是有效的IP地址,但它仍然会被匹配上。

撰写回答