mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-20 03:23:23 +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,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 ""
|
||||
|
||||
|
||||
|
@ -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 ):
|
||||
|
Loading…
Reference in New Issue
Block a user