2017-10-28 84 views
1

香港专业教育学院试图用这样的正则表达式,但我只是得到[]作为输出如何从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) 
+0

调用's.recvfrom'后'data'的内容是什么?拿这个,提出一个交互式的Python提示符,并测试你的模式,直到你得到你想要的。 – larsks

回答

1

三四改进:

  1. 使用非捕获基团((?:...)),而不是捕获组为IP地址的部分
  2. 你忘了原始文字
  3. re.findall()仅产生结果捕获组
  4. 您希望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