我從我的防火牆轉儲系統日誌數據,並希望匹配去我家的特定IP的連接。我正在使用下面的代碼。下面的代碼儘可能收集所有的數據,但我的IF語句永遠不會匹配。我試過沒有unicode u'192.168.1.1',沒有,如果我只是打印提取的IP,它顯示出來 - 見下面的輸出。使用Python 2.7在python中使用RE的系統日誌數據解析
#!/usr/bin/env python
## Tiny Syslog Server in Python.
##
## This is a tiny syslog server that is able to receive UDP based syslog
## entries on a specified port and save them to a file.
## That's it... it does nothing else...
## There are a few configuration parameters.
LOG_FILE = 'youlogfile2.log'
HOST, PORT = "192.168.1.2", 514
#
# NO USER SERVICEABLE PARTS BELOW HERE...
#
import logging
import SocketServer
import re
server = u'192.168.1.254'
logging.basicConfig(level=logging.INFO, format='%(message)s', datefmt='', filename=LOG_FILE, filemode='a')
class SyslogUDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = bytes.decode(self.request[0].strip())
socket = self.request[1]
ipDST = re.compile(r'dst=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)')
ipDSTExtracted = ipDST.findall(data)
#print (ipDSTExtracted)
if ipDSTExtracted == server:
print (ipDSTExtracted)
#print("%s : " % self.client_address[0], str(data))
logging.info(str(data))
if __name__ == "__main__":
try:
server = SocketServer.UDPServer((HOST,PORT), SyslogUDPHandler)
server.serve_forever(poll_interval=0.5)
except (IOError, SystemExit):
raise
except KeyboardInterrupt:
print ("Crtl+C Pressed. Shutting down.")
}
我得到了很多的比賽在這個輸出,但林不知道,如果它也許
[u'8.8.8.8']
[u'8.8.8.8']
[u'192.168.1.254']
[u'8.8.8.8']
[u'8.8.8.8']
[u'8.8.8.8']
[u'192.168.1.254']
[u'8.8.8.8']
[u'192.168.1.209']
[u'8.8.8.8']
[u'192.168.1.26']
[u'8.8.8.8']
[u'8.8.8.8']
我在空閒的測試支架看到和字符串版本和unicode版本將相互匹配,但它似乎不適用於此設置。
你使用的是Python 2還是3? –
方括號表示您的輸出是一個列表;那永遠不會匹配單個字符串;你可能想使用'ipDSTExtracted [0]'來代替(因爲'findall(...)'返回一個列表)。然而,看看你的代碼,你會比較'mediasite',這是沒有定義的,所以我不明白你在比較什麼。 – Evert
我弄亂了變量它只是服務器,而不是mediasite - 但是使用ipDSTExtracted [0],如果ipDSTExtracted [0] ==服務器:沒有u'匹配1次,然後它給出了一個索引超出範圍錯誤和只是繼續這樣做。 – turtle02