2017-10-28 85 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