Files
Hippolyzer/pyogp/lib/base/utilities/parse_packet.py
2009-02-06 05:35:03 +00:00

95 lines
2.8 KiB
Python

#!/usr/bin/python
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..', '..', '..', '..')))
from optparse import OptionParser
import binascii
from pyogp.lib.base.message.udpdeserializer import UDPPacketDeserializer
from logging import getLogger, StreamHandler, Formatter, CRITICAL, ERROR, WARNING, INFO, DEBUG
logger = getLogger('parse_packet')
log = logger.log
def main():
(options) = parse_options()
if options.verbose: enable_logging()
data = options.data
datatype = options.datatype
msg_buff = gen_message_buffer(data, datatype)
deserializer = UDPPacketDeserializer(msg_buff)
packet = deserializer.deserialize()
#print packet.__dict__
display_packet(packet)
def parse_options():
parser = OptionParser()
parser.add_option("-t", "--type", dest="datatype", default="hex", help="datatype to parse, default = hex")
parser.add_option("-d", "--data", dest="data", help="data to parse")
parser.add_option("-v", "--verbose", dest="verbose", default=True, action="store_false")
(options, args) = parser.parse_args()
return options
def gen_message_buffer(data, datatype):
if datatype == 'hex':
return message_buff_from_hex(data)
return
def message_buff_from_hex(data):
return binascii.unhexlify(''.join(data.split()))
def display_packet(packet):
delim = " "
print 'Packet Name:%s%s' % (delim, packet.name)
for k in packet.__dict__:
if k == 'name': pass
if k == 'message_data':
print k
for ablock in packet.message_data.blocks:
print "%sBlock Name:%s%s" % (delim, delim, ablock)
for somevars in packet.message_data.blocks[ablock]:
for avar in somevars.var_list:
zvar = somevars.get_variable(avar)
print "%s%s%s:%s%s" % (delim, delim, zvar.name, delim, zvar.get_data_as_string())
#print '%s:\t%s' % (k, packet.__dict__[k])
#print '%s:\t%s (%s)' (k, packet.__dict__[k], type(packet.__dict__[k]))
'''
for k,v in packet.__dict__:
if type(v) == type(object)
print 'Block Name:\t%s' % (v.name)
for k, v in getattr(packet, k):
'''
def enable_logging():
console = StreamHandler()
console.setLevel(DEBUG) # seems to be a no op, set it for the logger
formatter = Formatter('%(name)-30s: %(levelname)-8s %(message)s')
console.setFormatter(formatter)
getLogger('').addHandler(console)
# setting the level for the handler above seems to be a no-op
# it needs to be set for the logger, here the root logger
# otherwise it is NOTSET(=0) which means to log nothing.
getLogger('').setLevel(DEBUG)
if __name__ == "__main__":
main()