ファイアウォールからsyslogデータをダンプし、私の家の特定のIPに接続する接続を一致させたい。私は以下のコードを使用しています。以下のコードはすべてのデータを収集していますが、私のIF文は決して一致しません。私はunicodeなしで試してみました.'192.168.1.1 'で、抽出されたIPを出力しただけでは表示されません。下の出力を参照してください。 Pythonの2.7にPythonでREを使用してSyslogデータを解析する
#!/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']
もしわからないこの出力で試合の多くを得たが、イムユニコードのバージョンはお互いに一致しますが、この設定では動作しません。
Python 2または3を使用していますか? –
大括弧は出力がリストであることを示します。それは決して単一の文字列と一致しません。 ( 'findall(...)'がリストを返すので)代わりに 'ipDSTExtracted [0]'を使うことができます。しかし、あなたのコードを見ると、どこにも定義されていない 'mediasite'と比べて、最初に比較していることを理解できません。 – Evert
ipDSTExtracted [0]とipDSTExtracted [0] == serverの場合は、1回一致してから範囲外のエラーが発生し、ただそれを続けます。 – turtle02