在Python中使用正则表达式查找IP地址
我正在尝试解析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地址,但它仍然会被匹配上。