用python或使用Linux終端中的awk命令,處理檔案並提取其中的IP地址(文末有程式碼,可直接使用)

信安小萌新發表於2024-11-14

題目:我有一個日誌檔案如圖所示,我要取出檔案中所有的IP地址,以方便我將其加入到防火牆的黑名單中



程式碼中所用到的正規表示式介紹:

python使用的正規表示式是:

對該正規表示式的解釋:

\b(?:\d{1,3}\.){3}\d{1,3}\b
  • \b:單詞邊界。確保IP地址前後不與其他字元連線。
  • (?:\d{1,3}\.):非捕獲型分組。匹配1到3個數字,後跟一個點號。
  • {3}:前面的非捕獲型分組重複3次,即匹配3個數字和3個點號。
  • \d{1,3}:匹配1到3個數字。
  • \b:單詞邊界。確保IP地址前後不與其他字元連線。

shell命令列的awk命令使用的正規表示式是:

對該正規表示式的解釋:

[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+
  • [0-9]:表示匹配數字0到9之間的任意一個字元。
  • {1,3}:表示前面的字元可以重複出現1到3次。這裡用於匹配每個數字段(每個IP地址由四個數字段組成)。
  • \.:表示匹配點號字元".",需要使用轉義符"\"。
  • +:表示前面的字元可以重複出現1次或更多次。


python程式碼(其中涉及三種檔案輸入方式)

 1 #處理檔案並提取其中的IP地址,將結果輸入到test1.txt檔案中
 2 import re
 3 import sys
 4 file_name = sys.argv[1]
 5 f = open (file_name,"r",encoding='utf-8')
 6 #使用方法:在命令列中使用python 1.py test.txt 
 7 #test.txt是需要處理的檔案;1.py為我要操作的檔案
8 9 #2、獲取需要輸入的檔名,並對輸入的檔名進行處理。 10 #file_name = input("請輸入需要處理的檔名:") 11 #f = open (file_name,"r",encoding='utf-8') 12 13 #3、直接在程式碼中輸入檔名。 14 #f = open("test.txt", "r", encoding='utf-8') 15 16 data = f.readlines() 17 f.close() 18 f1 = open("test1.txt", "w", encoding='utf-8') 19 20 21 for line in data: 22 results = re.findall(r"\b(?:\d{1,3}\.){3}\d{1,3}\b", line) 23 for t in results: 24 25 26 27 #將結果寫入到f1的檔案中 28 f1.write(t + '\n') 29 f1.close()

處理結果,如圖所示:



Linux 終端中使用 awk命令

awk "{ match(\$0, /[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+/, ip); if(ip[0] != \"\") print ip[0] }" test.txt

 

處理結果,如圖所示:

相關文章