[snippets] updated: pytowiki script

git-svn-id: https://pykd.svn.codeplex.com/svn@64251 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2011-04-20 06:52:14 +00:00
parent 3e9951b63b
commit a3a4cadcc2
2 changed files with 110 additions and 24 deletions

View File

@ -9,6 +9,10 @@ IPv4 = 0x0008
ARP = 0x0608
IPv6 = 0xdd86
ICMP_PROTO = 0x01
UDP_PROTO = 0x11
TCP_PROTO = 0x06
def getHostWord( dataPos ):
return ( dataPos.next() << 8 ) + dataPos.next()
@ -18,6 +22,14 @@ def getNetWord( dataPos ):
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 )
class UdpPacket:
@ -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 isICMP( self ):
return self.typeVal==ICMP_PROTO
def isUDP( self ):
return self.typeVal==0x11
return self.typeVal==UDP_PROTO
def isTCP( self ):
return self.typeVal==0x06
return self.typeVal==TCP_PROTO
def __str__( self ):
if self.isUDP() : return "UDP"
if self.isTCP() : return "TCP"
else: return "%x" % self.typeVal
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 ):
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 ""

View File

@ -11,17 +11,33 @@ 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:
@ -30,29 +46,43 @@ class ModuleInfo:
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__ )
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 ):
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 ):