python plog.py YourChkMailAddress 10:30
or
python plog.py test@your.mail.address 99:99
99:99 is all
[A-F0-9]{11} <<< 装置毎に桁数をチェックすること
#!/usr/bin/env python
#
import sys
import re
email_pattern = sys.argv[1]
## file = '/var/log/maillog'
file = './maillog'
timestamp = sys.argv[2]
sender_stat = []
receiver_stat = []
def client(line):
client = re.search(r'(client=)([\w\d\.-]+[\w\d\.-]\[[\d]{1,3}\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3}\]))', line)
if client:
print re.search('(\w{3}[^a-zA-Z]+)+', line).group(), re.search('([A-F0-9]{11})(:)', line).group(1), '[Client connected from ip]:' , client.group(2)
def message_id(line):
msg_id=re.search(r'message-id=<([\w\.-]+@[\w\.-]+)>', line)
if msg_id:
print re.search('(\w{3}[^a-zA-Z]+)+', line).group(), re.search('([A-F0-9]{11})(:)', line).group(1), "[Header]:", msg_id.group()
def message_from(line):
sender = re.search('(from=<)([\w\.-]+@[\w\.-]+)(>)', line)
number_of_recepients = re.search('(nrcpt=)(\d)',line)
if sender: print re.search('(\w{3}[^a-zA-Z]+)+', line).group(), re.search('([A-F0-9]{11})(:)', line).group(1), "[Sender]:", sender.group(2)
if number_of_recepients: print '[Number of recepients]:', number_of_recepients.group(2)
def message_to(line):
receiver = re.search('(to=<)([\w\.-]+@[\w\.-]+)(>)', line)
delays = re.search(r'(delays=)([\d+.\d.]+)([\/])([\d+.\d.]+)([\/])([\d+.\d.]+)([\/])([\d+.\d.]+)',line)
if receiver: print re.search('(\w{3}[^a-zA-Z]+)+', line).group(), re.search('([A-F0-9]{11})(:)', line).group(1), "[Receiver]:", receiver.group(2), '\n[Postfix status]:'
if delays:
print '\t[Time before queue manager, including message transmission]:', delays.group(2), '\n','\t[Time in queue manager]:', delays.group(4),\
'\n','\t[Conn setup time including DNS, HELO and TLS]:', delays.group(6), '\n', '\t[Message transmission time]:',delays.group(8),'\n','\t[Status of the message]:', line.split(',')[5:]
def status(line):
status = re.search('removed', line)
if status:
print re.search('(\w{3}[^a-zA-Z]+)+', line).group(), re.search('([A-F0-9]{11})(:)', line).group(1), "[Message status in postfix queue]:", status.group()
# Find transaction id
key_ids = []
def find_transaction_id(line):
if len(timestamp)>1:
## GREEN
# print line
## GREEN
# if re.search(timestamp, line):
if ( re.search(timestamp, line) or ( timestamp == '99:99') ):
## GREEN
# print line
## GREEN
from_ = re.search(r'(postfix/qmgr\[\d*\]: )([A-F0-9]{11})(: from=<)([\w\.-]+@[\w\.-]+)(>)', line)
## to_ = re.search(r'(postfix/lmtp\[\d*\]: )([A-F0-9]{11})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
## to_ = re.search(r'(postfix/virtual\[\d*\]: )([A-F0-9]{11})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
to_ = re.search(r'(postfix/smtp\[\d*\]: )([A-F0-9]{11})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
## GREEN
## print to_
## print from_
## GREEN
if (from_) and (from_.group(2) not in key_ids):
key_ids.append(from_.group(2))
sender_stat.append(from_.group(3))
elif (to_) and (to_.group(2) not in key_ids):
key_ids.append(to_.group(2))
receiver_stat.append(to_.group(3))
else:
pass
else:
## to_ = re.search(r'(postfix/virtual\[\d*\]: )([A-F0-9]{10})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
from_ = re.search(r'(postfix/qmgr\[\d*\]: )([A-F0-9]{11})(: from=<)([\w\.-]+@[\w\.-]+)(>)', line)
## to_ = re.search(r'(postfix/lmtp\[\d*\]: )([A-F0-9]{11})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
## to_ = re.search(r'(postfix/virtual\[\d*\]: )([A-F0-9]{11})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
to_ = re.search(r'(postfix/smtp\[\d*\]: )([A-F0-9]{11})(: to=<)([\w\.-]+@[\w\.-]+)(>)', line)
if (from_) and (from_.group(2) not in key_ids):
key_ids.append(from_.group(2))
elif (to_) and (to_.group(2) not in key_ids):
key_ids.append(to_.group(2))
# Find transaction ids
fh = open(file, 'r')
for line in fh:
# print line
if re.search(email_pattern, line):
find_transaction_id(line)
fh.close()
matches = len(key_ids)
if matches > 0:
print "This mailbox was found ", matches, " times as Sender\Receiver\n"
print '**************************************'
else:
print sys.exit("Matches not found")
# Find all events related to that transaction ids elem in line
for elem in key_ids:
for line in open(file,'r'):
current_id = re.search(r'([A-F0-9]{11})(:)', line)
if current_id and (elem == current_id.group(1)):
client(line)
message_id(line)
message_from(line)
message_to(line)
status(line)
print '**************************************'
print "\nI am done!"