2

私は SIEM を使用しており、比較的大きなファイルから IP アドレスを解析できる必要があります。一貫したフィールドがないため、「カット」はオプションではありません。az AZ 0-9 とピリオド "." を除くすべての文字を削除するために、修正した python スクリプトを使用しています。ファイルを適切に解析できるようにします。問題は、これが私の SIEM ファイルでは機能しないことです。この「192.168.1.2!@#$!@%@$」のようなテキスト ファイルがあれば問題ありません。不要な文字はすべて適切に削除され、IP だけが新しいファイルに出力されます。 . 問題は、ファイルが「192.168.168.168@#$% これはテストです」のように見える場合、異常な文字を削除する最初の段階の後にそのまま放置されることです。助けてください、なぜこれを行うのかわかりません。これが私のコードです:

    #!/usr/bin/python
    import re
    import sys

    unmodded = raw_input("Please enter the file to parse. Example: /home/aaron/ipcheck: ")
    string = open(unmodded).read()
    new_str = re.sub('[^a-zA-Z0-9.\n\.]', ' ', string)
    open('modifiedipcheck.txt', 'w').write(new_str)

    try:
        file = open('modifiedipcheck.txt', "r")
        ips = []
        for text in file.readlines():
            text = text.rstrip()
            regex = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:    [\d]{1,3})$',text)
            if regex is not None and regex not in ips:
                ips.append(regex)
         for ip in ips:
            outfile = open("checkips", "a")
            combine = "".join(ip)
            if combine is not '':
                print "IP: %s" % (combine)
                outfile.write(combine)
                outfile.write("\n")
     finally:
            file.close()
            outfile.close()

誰にもアイデアはありますか?よろしくお願いします。

4

2 に答える 2

3

正規表現は で終わり$ます。これは、行がその時点で終了することを期待していることを示しています。それを削除すると、正常に動作するはずです:

regex = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text)

正規表現自体をさらに単純化することもできます。

regex = re.findall(r'(?:\d{1,3}\.){3}\d{1,3}', text)
于 2013-02-28T09:13:36.777 に答える
1

これが私が起こっていると思うことです。ガベージ文字を探してスペースに置き換えるパターンがあります。IP アドレスの後にガベージだけが続く場合、ガベージはスペースに変わり、文字列を取り除くとスペースがなくなり、一致させたいアドレスだけが残ります。

パターンは a で終わる$ため、行末に固定されているため、住所が行の最後のものである場合に一致します。

this is a testガベージ以外の文字がそのまま残っている場合、ストリップはそれらを削除しませ$ん。これは、IP アドレスが一致しないことを意味します。

于 2013-02-28T09:15:20.730 に答える