mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 04:13:22 +08:00
[snippets] updated: pytowiki script
git-svn-id: https://pykd.svn.codeplex.com/svn@64251 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
3e9951b63b
commit
a3a4cadcc2
@ -9,6 +9,10 @@ IPv4 = 0x0008
|
|||||||
ARP = 0x0608
|
ARP = 0x0608
|
||||||
IPv6 = 0xdd86
|
IPv6 = 0xdd86
|
||||||
|
|
||||||
|
ICMP_PROTO = 0x01
|
||||||
|
UDP_PROTO = 0x11
|
||||||
|
TCP_PROTO = 0x06
|
||||||
|
|
||||||
|
|
||||||
def getHostWord( dataPos ):
|
def getHostWord( dataPos ):
|
||||||
return ( dataPos.next() << 8 ) + dataPos.next()
|
return ( dataPos.next() << 8 ) + dataPos.next()
|
||||||
@ -18,6 +22,14 @@ 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 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class UdpPacket:
|
class UdpPacket:
|
||||||
|
|
||||||
@ -45,7 +57,7 @@ class UdpPacket:
|
|||||||
s += "\tChecksum: %#x\n" % self.checksum
|
s += "\tChecksum: %#x\n" % self.checksum
|
||||||
s += "\n"
|
s += "\n"
|
||||||
else:
|
else:
|
||||||
s += "FAILED\n"
|
s += "MALFORMED\n"
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
@ -70,21 +82,31 @@ class IpAddress:
|
|||||||
return "%d.%d.%d.%d" % tuple( self.addr[0:4] )
|
return "%d.%d.%d.%d" % tuple( self.addr[0:4] )
|
||||||
|
|
||||||
|
|
||||||
|
class Ip6Address:
|
||||||
|
|
||||||
|
def __init__( self, dataPos ):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __str__( self ):
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
class IpProtocol:
|
class IpProtocol:
|
||||||
|
|
||||||
def __init__( self, dataPos ):
|
def __init__( self, dataPos ):
|
||||||
self.typeVal = dataPos.next()
|
self.typeVal = dataPos.next()
|
||||||
|
|
||||||
|
def isICMP( self ):
|
||||||
|
return self.typeVal==ICMP_PROTO
|
||||||
|
|
||||||
def isUDP( self ):
|
def isUDP( self ):
|
||||||
return self.typeVal==0x11
|
return self.typeVal==UDP_PROTO
|
||||||
|
|
||||||
def isTCP( self ):
|
def isTCP( self ):
|
||||||
return self.typeVal==0x06
|
return self.typeVal==TCP_PROTO
|
||||||
|
|
||||||
def __str__( self ):
|
def __str__( self ):
|
||||||
if self.isUDP() : return "UDP"
|
return { ICMP_PROTO: "ICMP", UDP_PROTO: "UDP", TCP_PROTO: "TCP" }.get( self.typeVal, hex(self.typeVal) )
|
||||||
if self.isTCP() : return "TCP"
|
|
||||||
else: return "%x" % self.typeVal
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -135,7 +157,7 @@ class IpPacket:
|
|||||||
s += str( self.nextLayerPckt )
|
s += str( self.nextLayerPckt )
|
||||||
|
|
||||||
else:
|
else:
|
||||||
s += "FAILED\n"
|
s += "MALFORMED\n"
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
@ -143,9 +165,43 @@ class IpPacket:
|
|||||||
class Ip6Packet():
|
class Ip6Packet():
|
||||||
|
|
||||||
def __init__( self, dataPos ):
|
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
|
pass
|
||||||
|
|
||||||
def __str__( self ):
|
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 ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,17 +11,33 @@ def usage():
|
|||||||
|
|
||||||
class CodeplexFormatter:
|
class CodeplexFormatter:
|
||||||
|
|
||||||
|
def endl( self ):
|
||||||
|
return "\n"
|
||||||
|
|
||||||
def header1( self, s ):
|
def header1( self, s ):
|
||||||
return "! " + s + "\n"
|
return "! " + s + self.endl()
|
||||||
|
|
||||||
def header2( self, s ):
|
def header2( self, s ):
|
||||||
return "!! " + s + "\n"
|
return "!! " + s + self.endl()
|
||||||
|
|
||||||
def header3( self, s ):
|
def header3( self, s ):
|
||||||
return "!!! " + s + "\n"
|
return "!!! " + s + self.endl()
|
||||||
|
|
||||||
|
def header4( self, s ):
|
||||||
|
return "!!!! " + s + self.endl()
|
||||||
|
|
||||||
def bulletItem( self, s ):
|
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:
|
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.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 ):
|
def buildDoc( ioStream, formatter, apiInfo ):
|
||||||
|
|
||||||
ioStream.write( formatter.header2( "Functions" ) )
|
ioStream.write( formatter.header2( "Functions" ) )
|
||||||
|
|
||||||
for func in apiInfo.funcs:
|
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" ) )
|
ioStream.write( formatter.header2( "Classes" ) )
|
||||||
|
|
||||||
for cls in apiInfo.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:
|
for func in apiInfo.funcs:
|
||||||
|
ioStream.write( formatter.anchor( func.__name__ ) )
|
||||||
ioStream.write( formatter.header3( 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:
|
for cls in apiInfo.classes:
|
||||||
|
ioStream.write( formatter.anchor( cls.__name__ ) )
|
||||||
ioStream.write( formatter.header3( 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 ):
|
def buildFuncDir( ioStream, funcs ):
|
||||||
|
Loading…
Reference in New Issue
Block a user