<s> """<STR_LIT>""" <EOL> import struct <EOL> import dpkt <EOL> import dns <EOL> def encode_name ( name ) : <EOL> """<STR_LIT>""" <EOL> l = [ ] <EOL> for c in struct . pack ( '<STR_LIT>' , name ) : <EOL> c = ord ( c ) <EOL> l . append ( chr ( ( c >> <NUM_LIT:4> ) + <NUM_LIT> ) ) <EOL> l . append ( chr ( ( c & <NUM_LIT> ) + <NUM_LIT> ) ) <EOL> return '<STR_LIT>' . join ( l ) <EOL> def decode_name ( nbname ) : <EOL> """<STR_LIT>""" <EOL> if len ( nbname ) != <NUM_LIT:32> : <EOL> return nbname <EOL> l = [ ] <EOL> for i in range ( <NUM_LIT:0> , <NUM_LIT:32> , <NUM_LIT:2> ) : <EOL> l . append ( chr ( ( ( ord ( nbname [ i ] ) - <NUM_LIT> ) << <NUM_LIT:4> ) | <EOL> ( ( ord ( nbname [ i + <NUM_LIT:1> ] ) - <NUM_LIT> ) & <NUM_LIT> ) ) ) <EOL> return '<STR_LIT>' . join ( l ) . split ( '<STR_LIT:\x00>' , <NUM_LIT:1> ) [ <NUM_LIT:0> ] <EOL> NS_A = <NUM_LIT> <EOL> NS_NS = <NUM_LIT> <EOL> NS_NULL = <NUM_LIT> <EOL> NS_NB = <NUM_LIT> <EOL> NS_NBSTAT = <NUM_LIT> <EOL> NS_IN = <NUM_LIT:1> <EOL> NS_NAME_G = <NUM_LIT> <EOL> NS_NAME_DRG = <NUM_LIT> <EOL> NS_NAME_CNF = <NUM_LIT> <EOL> NS_NAME_ACT = <NUM_LIT> <EOL> NS_NAME_PRM = <NUM_LIT> <EOL> nbstat_svcs = { <EOL> ( <NUM_LIT> , <NUM_LIT:0> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) , ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:0> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:0> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) , ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:0> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) , <EOL> ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:0> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:0> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] , <EOL> ( <NUM_LIT> , <NUM_LIT:1> ) : [ ( '<STR_LIT>' , '<STR_LIT>' ) ] <EOL> } <EOL> def node_to_service_name ( ( name , service , flags ) ) : <EOL> try : <EOL> unique = int ( flags & NS_NAME_G == <NUM_LIT:0> ) <EOL> for namepfx , svcname in nbstat_svcs [ ( service , unique ) ] : <EOL> if name . startswith ( namepfx ) : <EOL> return svcname <EOL> except KeyError : <EOL> pass <EOL> return '<STR_LIT>' <EOL> class NS ( dns . DNS ) : <EOL> """<STR_LIT>""" <EOL> class Q ( dns . DNS . Q ) : <EOL> pass <EOL> class RR ( dns . DNS . RR ) : <EOL> """<STR_LIT>""" <EOL> def unpack_rdata ( self , buf , off ) : <EOL> if self . type == NS_A : <EOL> self . ip = self . rdata <EOL> elif self . type == NS_NBSTAT : <EOL> num = ord ( self . rdata [ <NUM_LIT:0> ] ) <EOL> off = <NUM_LIT:1> <EOL> l = [ ] <EOL> for i in range ( num ) : <EOL> name = self . rdata [ off : off + <NUM_LIT:15> ] . split ( None , <NUM_LIT:1> ) [ <NUM_LIT:0> ] . split ( '<STR_LIT:\x00>' , <NUM_LIT:1> ) [ <NUM_LIT:0> ] <EOL> service = ord ( self . rdata [ off + <NUM_LIT:15> ] ) <EOL> off += <NUM_LIT:16> <EOL> flags = struct . unpack ( '<STR_LIT>' , self . rdata [ off : off + <NUM_LIT:2> ] ) [ <NUM_LIT:0> ] <EOL> off += <NUM_LIT:2> <EOL> l . append ( ( name , service , flags ) ) <EOL> self . nodenames = l <EOL> def pack_name ( self , buf , name ) : <EOL> return dns . DNS . pack_name ( self , buf , encode_name ( name ) ) <EOL> def unpack_name ( self , buf , off ) : <EOL> name , off = dns . DNS . unpack_name ( self , buf , off ) <EOL> return decode_name ( name ) , off <EOL> class Session ( dpkt . Packet ) : <EOL> """<STR_LIT>""" <EOL> __hdr__ = ( <EOL> ( '<STR_LIT:type>' , '<STR_LIT:B>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT:B>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT:H>' , <NUM_LIT:0> ) <EOL> ) <EOL> SSN_MESSAGE = <NUM_LIT:0> <EOL> SSN_REQUEST = <NUM_LIT:1> <EOL> SSN_POSITIVE = <NUM_LIT:2> <EOL> SSN_NEGATIVE = <NUM_LIT:3> <EOL> SSN_RETARGET = <NUM_LIT:4> <EOL> SSN_KEEPALIVE = <NUM_LIT:5> <EOL> class Datagram ( dpkt . Packet ) : <EOL> """<STR_LIT>""" <EOL> __hdr__ = ( <EOL> ( '<STR_LIT:type>' , '<STR_LIT:B>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT:B>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT:id>' , '<STR_LIT:H>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT:src>' , '<STR_LIT:I>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT:H>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT:H>' , <NUM_LIT:0> ) , <EOL> ( '<STR_LIT>' , '<STR_LIT:H>' , <NUM_LIT:0> ) <EOL> ) <EOL> DGRAM_UNIQUE = <NUM_LIT> <EOL> DGRAM_GROUP = <NUM_LIT> <EOL> DGRAM_BROADCAST = <NUM_LIT> <EOL> DGRAM_ERROR = <NUM_LIT> <EOL> DGRAM_QUERY = <NUM_LIT> <EOL> DGRAM_POSITIVE = <NUM_LIT> <EOL> DGRAM_NEGATIVE = <NUM_LIT> </s>
