如何从python中的数据包中获取IP地址?

时间:2017-10-28 18:50:14

标签: python regex

我试过像这样的正则表达式,但我只是得到[]作为输出

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)

1 个答案:

答案 0 :(得分:1)

三四项改进:

  1. 使用非捕获组((?:...))而不是捕获IP地址部分的组
  2. 你忘记了原始文字
  3. re.findall()仅生成捕获组的结果
  4. 您希望IP地址位于字符串的末尾($),这是打算吗?如果是这样,最后\b无意义
  5. 所有这些结合起来,你可以使用

    pattern = r'\b((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.|$)){4})'
    #      ---^---
    

    你应该没事。请参阅a working demo on regex101.com