2017-10-28 3 views
1

IVEは、このような正規表現を試みたが、私はちょうど[]出力としてどのように私は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

三-4の改良取得:代わりのグループを捕獲するの

  1. 使用非キャプチャ・グループ((?:...)を)あなたは
  2. re.findall()生のリテラルを忘れてしまったIPアドレス
  3. の部分のみをキャプチャグループ
  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を参照してください。

関連する問題