如何从python数据包中获取IP地址?
问题描述:
香港专业教育学院试图用这样的正则表达式,但我只是得到[]作为输出如何从python数据包中获取IP地址?
import socket
import re
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
data = str(s.recvfrom(65565))
pattern = '\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b'
ips = re.findall(pattern, data)
print(ips)
答
三四改进:
- 使用非捕获基团(
(?:...)
),而不是捕获组为IP地址的部分 - 你忘了原始文字
-
re.findall()
仅产生结果捕获组 - 您希望IP地址位于字符串的末尾(
$
),这是打算使用吗?如果是这样,最后\b
是没有意义的
所有这些结合起来,你可能使用
pattern = r'\b((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.|$)){4})'
# ---^---
而且你应该罚款。见a working demo on regex101.com。
调用's.recvfrom'后'data'的内容是什么?拿这个,提出一个交互式的Python提示符,并测试你的模式,直到你得到你想要的。 – larsks