From a3a4cadcc27ede2743378752ca900a94171d87ea Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Wed, 20 Apr 2011 06:52:14 +0000 Subject: [PATCH] [snippets] updated: pytowiki script git-svn-id: https://pykd.svn.codeplex.com/svn@64251 9b283d60-5439-405e-af05-b73fd8c4d996 --- snippets/nbl.py | 86 ++++++++++++++++++++++++++++++++++++-------- snippets/pytowiki.py | 48 ++++++++++++++++++++----- 2 files changed, 110 insertions(+), 24 deletions(-) diff --git a/snippets/nbl.py b/snippets/nbl.py index a914ae9..f3ec8b4 100644 --- a/snippets/nbl.py +++ b/snippets/nbl.py @@ -9,13 +9,25 @@ IPv4 = 0x0008 ARP = 0x0608 IPv6 = 0xdd86 +ICMP_PROTO = 0x01 +UDP_PROTO = 0x11 +TCP_PROTO = 0x06 + def getHostWord( dataPos ): - return ( dataPos.next() << 8 ) + dataPos.next() + return ( dataPos.next() << 8 ) + dataPos.next() def getNetWord( dataPos ): - return dataPos.next() + ( dataPos.next() << 8 ) + return dataPos.next() + ( dataPos.next() << 8 ) + + +def getHostDWord( dataPos ): + return ( dataPos.next() << 24 ) + ( dataPos.next() << 16 ) + ( dataPos.next() << 8 ) + dataPos.next() + + +def getNetDWord( dataPos ): + return dataPos.next() + ( dataPos.next() << 8 ) + ( dataPos.next() << 16 ) + ( dataPos.next() << 24 ) @@ -45,7 +57,7 @@ class UdpPacket: s += "\tChecksum: %#x\n" % self.checksum s += "\n" else: - s += "FAILED\n" + s += "MALFORMED\n" return s @@ -70,21 +82,31 @@ class IpAddress: return "%d.%d.%d.%d" % tuple( self.addr[0:4] ) +class Ip6Address: + + def __init__( self, dataPos ): + pass + + def __str__( self ): + return "" + + class IpProtocol: - def __init__( self, dataPos ): - self.typeVal = dataPos.next() + def __init__( self, dataPos ): + self.typeVal = dataPos.next() - def isUDP( self ): - return self.typeVal==0x11 + def isICMP( self ): + return self.typeVal==ICMP_PROTO - def isTCP( self ): - return self.typeVal==0x06 + def isUDP( self ): + return self.typeVal==UDP_PROTO - def __str__( self ): - if self.isUDP() : return "UDP" - if self.isTCP() : return "TCP" - else: return "%x" % self.typeVal + def isTCP( self ): + return self.typeVal==TCP_PROTO + + def __str__( self ): + return { ICMP_PROTO: "ICMP", UDP_PROTO: "UDP", TCP_PROTO: "TCP" }.get( self.typeVal, hex(self.typeVal) ) @@ -135,7 +157,7 @@ class IpPacket: s += str( self.nextLayerPckt ) else: - s += "FAILED\n" + s += "MALFORMED\n" return s @@ -143,9 +165,43 @@ class IpPacket: class Ip6Packet(): def __init__( self, dataPos ): - pass + + self.parsed = False + + try: + + t = getNetDWord( dataPos ) + self.version = ( t >> 28 ) & 0xF + self.trafficClass = ( t >> 20 ) & 0xFF + self.flowLabel = t & 0xFFF + self.payloadLength = getNetWord( dataPos ) + self.nextHeader = dataPos.next() + self.hopLimit = dataPos.next() + self.srcAddr = Ip6Address( dataPos ) + self.destAddr = Ip6Address( dataPos ) + self.parsed = True + + except StopIteration: + pass + def __str__( self ): + + s = "IPv6 header" + + if self.parsed: + s += "OK\n" + s += "\tversion: %x\n" % self.version + s += "\ttraffic class %x\n" % self.trafficClass + s += "\tflowLabel: %x\n" % self.flowLabel + s += "\tpayloadLength: %x\n" % self.payloadLength + s += "\tnextHeader: %x\n" % self.nextHeader + s += "\thopLimit: %d\n" % self.hopLimit + s += "\tsrcAddr: " + str(self.srcAddr) + "\n" + s += "\tdestAddr: " + str(self.destAddr) + "\n" + else: + s += "MALFORMED\n" + return "" diff --git a/snippets/pytowiki.py b/snippets/pytowiki.py index 2826e85..2ab62ae 100644 --- a/snippets/pytowiki.py +++ b/snippets/pytowiki.py @@ -11,24 +11,43 @@ def usage(): class CodeplexFormatter: + def endl( self ): + return "\n" + def header1( self, s ): - return "! " + s + "\n" + return "! " + s + self.endl() def header2( self, s ): - return "!! " + s + "\n" + return "!! " + s + self.endl() def header3( self, s ): - return "!!! " + s + "\n" + return "!!! " + s + self.endl() + + def header4( self, s ): + return "!!!! " + s + self.endl() def bulletItem( self, s ): - return "* " + s + "\n" + return "* " + s + self.endl() + + def escapeMarkup( self, s ): + return "{\"" + s + "\"}" + + def link( self, text, link ): + return "[" + text + "|#" + link + "]" + + def anchor( self, link ): + return "{anchor:" + link + "}" + self.endl() + class ModuleInfo: def __init__ (self, module): self.funcs = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ ) - self.classes = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "class" ], key=lambda x: x.__name__ ) + self.classes = sorted( [ item for item in module.__dict__.values() if type(item).__name__ == "class" ], key=lambda x: x.__name__ ) + + for cls in self.classes: + cls.methods = sorted( [ item for item in cls.__dict__.values() if type(item).__name__ == "function" ], key=lambda x: x.__name__ ) def buildDoc( ioStream, formatter, apiInfo ): @@ -36,23 +55,34 @@ def buildDoc( ioStream, formatter, apiInfo ): ioStream.write( formatter.header2( "Functions" ) ) for func in apiInfo.funcs: - ioStream.write( formatter.bulletItem( func.__name__ ) ) + ioStream.write( formatter.bulletItem( formatter.link( func.__name__, func.__name__ ) ) ) ioStream.write( formatter.header2( "Classes" ) ) for cls in apiInfo.classes: - ioStream.write( formatter.bulletItem( cls.__name__ ) ) + ioStream.write( formatter.bulletItem( formatter.link( cls.__name__, cls.__name__ ) ) ) for func in apiInfo.funcs: + ioStream.write( formatter.anchor( func.__name__ ) ) ioStream.write( formatter.header3( func.__name__ ) ) - ioStream.write( func.__doc__ + "\n" ) + ioStream.write( formatter.escapeMarkup( func.__doc__) + formatter.endl() ) for cls in apiInfo.classes: + ioStream.write( formatter.anchor( cls.__name__ ) ) ioStream.write( formatter.header3( cls.__name__ ) ) - ioStream.write( cls.__doc__ + "\n" ) + ioStream.write( formatter.escapeMarkup( cls.__doc__) + formatter.endl() ) + for m in cls.methods: + if m.__doc__ != None: + ioStream.write( formatter.bulletItem( formatter.escapeMarkup( m.__name__ ) ) ) + + + for m in cls.methods: + if m.__doc__ != None: + ioStream.write( formatter.header4( formatter.escapeMarkup( m.__name__ ) ) ) + ioStream.write( formatter.escapeMarkup( m.__doc__ ) + formatter.endl() ) def buildFuncDir( ioStream, funcs ):