w00t a packet parser
This commit is contained in:
95
pyogp/lib/base/utilities/parse_packet.py
Normal file
95
pyogp/lib/base/utilities/parse_packet.py
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user