def onTriSend(self, message, sutAddress): try: # FIXME: # Should go to a configured codec instance instead. # (since we modify the message here...) if not message.has_key('version'): message['version'] = self['version'] try: (encodedMessage, summary) = CodecManager.encode('http.request', message) except Exception as e: raise ProbeImplementationManager.ProbeException( 'Invalid request message format: cannot encode HTTP request:\n%s' % ProbeImplementationManager.getBacktrace()) # Connect if needed if not self.isConnected(): self.connect() # Send our payload self._httpConnection.send(encodedMessage) self.logSentPayload(summary, encodedMessage, "%s:%s" % self._httpConnection.getpeername()) # Now wait for a response asynchronously self.waitResponse() except Exception as e: raise ProbeImplementationManager.ProbeException( 'Unable to send HTTP request: %s' % str(e))
def _send(self, conn, data): encoder = self['default_encoder'] if encoder: try: (data, summary) = CodecManager.encode(encoder, data) except Exception: raise ProbeImplementationManager.ProbeException( 'Cannot encode outgoing message using defaut encoder:\n%s' % ProbeImplementationManager.getBacktrace()) self.logSentPayload(summary, data, "%s:%s" % conn.socket.getpeername()) else: self.logSentPayload("TCP data", data, "%s:%s" % conn.socket.getpeername()) conn.socket.send(data)
def onTriSend(self, message, sutAddress): try: # FIXME: # Should go to a configured codec instance instead. # (since we modify the message here... should be a copy instead) if not message.has_key('version'): message['version'] = self['version'] if not message.has_key('headers'): message['headers'] = {} cseq = None # Non-strict mode: CSeq management: we add one if none is found if not self['strict_mode']: # Look for a CSeq for k, v in message['headers'].items(): if k.lower() == 'cseq': cseq = str(v) if cseq is None: # Generate and set a cseq message['headers']['CSeq'] = self.generateCSeq() cseq = str(message['headers']['CSeq']) try: encodedMessage, summary = CodecManager.encode( 'rtsp.request', message) except Exception as e: raise ProbeImplementationManager.ProbeException( 'Invalid request message format: cannot encode RTSP request' ) # Connect if needed if not self.isConnected(): self.connect() # Send our payload self._connection.send(encodedMessage) self.logSentPayload(summary, encodedMessage, "%s:%s" % self._connection.getpeername()) # Now wait for a response asynchronously self.waitResponse(cseq=cseq) except Exception as e: raise ProbeImplementationManager.ProbeException( 'Unable to send RTSP request: %s' % str(e))
<b:author>Mickaël Orangina</b:author> <title locale="fr">Tonnerre sous les tropiques</title> <title locale="us">Tropic thunder</title> <title locale="es">No <i>habla</i> espagnol</title> <b:summary><![CDATA[This is a CDATA section <-> <-- this is a tie fighter]]></b:summary> </book> </library> </soapenv:Body> </soapenv:Envelope> """ for codec in ['ds']: for sample in [sampleEnv]: print "%s %s %s" % (40 * '=', codec, 40 * '=') print "signed with %s:" % codec (signed, summary) = CodecManager.encode(codec, sample) print print "Summary: %s" % summary print print signed print print "verifying signature with %s:" % codec (output, summary) = CodecManager.decode(codec, signed) verified = output['message'] signedBy = output['signedBy'] print verified print assert (signedBy[0] == 'certificate') assert (signedBy[1].strip() == DEFAULT_SIGNING_CERTIFICATE.strip()) print print "Summary: %s" % summary
<library> <administrator>Héléna Utf8</administrator> <book> <isbn>89084-89089</isbn> <author>Philippe Kendall</author> <author>Mickaël Orangina</author> <title>Tropic thunder</title> </book> </library> """ for codec in [ 'xer.lite', 'xer.noprolog', 'xer.iso', 'xer.canonical' ]: print "%s %s %s" % (40*'=', codec, 40*'=') print "decoded with %s:" % codec (decoded, _) = CodecManager.decode(codec, sample) print decoded print print "re-encoded with %s:" % codec (reencoded, _) = CodecManager.encode(codec, decoded) print print reencoded print "re-decoded with %s:" % codec (redecoded, _) = CodecManager.decode(codec,reencoded) print redecoded assert(decoded == redecoded) print
print "Codec unit tests" print 80*'-' samples = [ ('snmp.v1', trap1), ('snmp.v1', getRequest1), ('snmp.v1', getNextRequest1), ('snmp.v1', setRequest1), ('snmp.v1', getResponse1), ('snmp.v2c', trap2c), ('snmp.v2c', getRequest2c), ('snmp.v2c', getNextRequest2c), ('snmp.v2c', setRequest2c), ('snmp.v2c', getResponse2c), ('snmp.v2c', getResponse2cNoSuchObject), ] for pdu, s in samples: print print 80*'-' print "Testing: %s" % s s = binascii.unhexlify(s) (decoded, summary) = CodecManager.decode(pdu, s) print "Decoded: %s\nSummary: %s" % (decoded, summary) (reencoded, summary) = CodecManager.encode(pdu, decoded) print "Reencoded: %s\nSummary: %s" % (binascii.hexlify(reencoded), summary) print "Original : %s" % binascii.hexlify(s) assert(s == reencoded) (redecoded, summary) = CodecManager.decode(pdu, reencoded) print "Decoded: %s\nSummary: %s" % (redecoded, summary) assert(redecoded == decoded)
# From gsm_map_with_ussd_string.pcap sample tcapBegin2 = \ "626a48042f3b46026b3a2838060700118605010101a02d602b80020780a109060704000001001302be1a2818060704000001010101a00da00b80099656051124006913f66c26a12402010102013b301c04010f040eaa180da682dd6c31192d36bbdd468007917267415827f2" dialoguePDU = \ "601aa109060704000001001902be0d280ba009a00780059691214365" print (80*'-') print ("TCAP (ITU-T) Codec unit tests") print (80*'-') samples = [ ('tcap', tcapBegin), ('tcap', tcapBegin2), ('tcap.DialoguePDU', dialoguePDU) ] for pdu, s in samples: print () print (80*'-') print ("Testing: %s" % s) s = binascii.unhexlify(s) (decoded, summary) = CodecManager.decode(pdu, s) print ("Decoded: %s\nSummary: %s" % (decoded, summary)) (reencoded, summary) = CodecManager.encode(pdu, decoded) print ("Reencoded: %s\nSummary: %s" % (binascii.hexlify(reencoded), summary)) print ("Original : %s" % binascii.hexlify(s)) # assert(s == reencoded) # Cannot always work due to default value decoding/reencoding (redecoded, summary) = CodecManager.decode(pdu, reencoded) print ("Decoded: %s\nSummary: %s" % (redecoded, summary)) assert(redecoded == decoded)
def oo(x): return binascii.hexlify(x) print 80 * '-' print "TBCD Codec unit tests" print 80 * '-' samples = [ ('\x21\xf3', "123"), ('\x21\x43', "1234"), ] for e, d in samples: print print 80 * '-' (encoded, _) = CodecManager.encode('tbcd', d) print "encoded: %s (%s)" % (repr(encoded), oo(encoded)) assert (encoded == e) (decoded, _) = CodecManager.decode('tbcd', e) print "decoded: %s" % repr(decoded) assert (decoded == d) print print 80 * '-' print "GSM AddressString Codec unit tests" print 80 * '-' samples = [ ('\x80\x21\xf3', { 'digits': "123", 'numberingPlanIndicator': 'unknown', 'natureOfAddress': 'unknown'
return (self.DECODING_OK, m.getDecodedLength(), m.toUserland(), m.summary()) CodecManager.registerCodecClass('sua', SuaCodec) if __name__ == '__main__': print("SUA Codec unit tests") print(80 * '-') samples = [ # SUA ASP active / Load-share, routing context 300 "0100040100000018000b000800000002000600080000012c", # SUA ERR / Refused - management blocking, network appearance 0, some diagnostic info "0100000000000034000c00080000000d010d0008000000000007001c0100040100000018000b000800000002000600080000012c", # MAP SRI "01000701000000cc000600080000012c01150008000000000102002c0001000780010012000000040c0001042610101010100000800200080000057880030008000000080103002c0001000780010012000000040c000104262143658739000080020008000007d28003000800000006011600080000000001010008000000ff010b004962434804000200686b1a2818060700118605010101a00d600ba1090607040000010014026c1fa11d02010102012d30158007910026151101008101ff820791261010101010000000" ] for s in samples: print("Testing: %s" % s) s = binascii.unhexlify(s) (_, consumed, decoded, summary) = CodecManager.incrementalDecode('sua', s) print("Decoded: %s\nSummary: %s" % (decoded, summary)) print("Consumed %s bytes ouf of %s" % (consumed, len(s))) (reencoded, summary) = CodecManager.encode('sua', decoded) print("Reencoded: %s\nSummary: %s" % (binascii.hexlify(reencoded), summary)) print("Original : %s" % binascii.hexlify(s)) assert (s == reencoded)
<b:author>Mickaël Orangina</b:author> <title locale="fr">Tonnerre sous les tropiques</title> <title locale="us">Tropic thunder</title> <title locale="es">No <i>habla</i> espagnol</title> <b:summary><![CDATA[This is a CDATA section <-> <-- this is a tie fighter]]></b:summary> </book> </library> </soapenv:Body> </soapenv:Envelope> """ for codec in [ 'ds' ]: for sample in [ sampleEnv ]: print "%s %s %s" % (40*'=', codec, 40*'=') print "signed with %s:" % codec (signed, summary) = CodecManager.encode(codec, sample) print print "Summary: %s" % summary print print signed print print "verifying signature with %s:" % codec (output, summary) = CodecManager.decode(codec,signed) verified = output['message'] signedBy = output['signedBy'] print verified print assert(signedBy[0] == 'certificate') assert(signedBy[1].strip() == DEFAULT_SIGNING_CERTIFICATE.strip()) print print "Summary: %s" % summary
<library> <administrator>Héléna Utf8</administrator> <book> <isbn>89084-89089</isbn> <author>Philippe Kendall</author> <author>Mickaël Orangina</author> <title>Tropic thunder</title> </book> </library> """ for codec in [ 'xer.lite', 'xer.noprolog', 'xer.iso', 'xer.canonical' ]: print ("%s %s %s" % (40*'=', codec, 40*'=')) print ("decoded with %s:" % codec) (decoded, _) = CodecManager.decode(codec, sample) print (decoded) print () print ("re-encoded with %s:" % codec) (reencoded, _) = CodecManager.encode(codec, decoded) print () print (reencoded) print ("re-decoded with %s:" % codec) (redecoded, _) = CodecManager.decode(codec,reencoded) print (redecoded) assert(decoded == redecoded) print ()
return binascii.unhexlify(x.replace(' ', '')) def oo(x): return binascii.hexlify(x) print 80*'-' print "TBCD Codec unit tests" print 80*'-' samples = [ ('\x21\xf3', "123"), ('\x21\x43', "1234"), ] for e, d in samples: print print 80*'-' (encoded, _) = CodecManager.encode('tbcd', d) print "encoded: %s (%s)" % (repr(encoded), oo(encoded)) assert(encoded == e) (decoded, _) = CodecManager.decode('tbcd', e) print "decoded: %s" % repr(decoded) assert(decoded == d) print print 80*'-' print "GSM AddressString Codec unit tests" print 80*'-' samples = [ ('\x80\x21\xf3', { 'digits': "123", 'numberingPlanIndicator': 'unknown', 'natureOfAddress': 'unknown' }), ('\x91\x21\x43', { 'digits': "1234", 'numberingPlanIndicator': 'isdn', 'natureOfAddress': 'international' }), ('\x91\x09\x56\x43\x21\x78', { 'digits': "9065341287", 'numberingPlanIndicator': 'isdn', 'natureOfAddress': 'international' }), ]
print (80*'-') print ("MAP (Phase 2+) Codec unit tests") print (80*'-') samples = [ ('RoutingInfoForSM-Arg', sendRoutingInfoForSMArg), ] for pdu, s in samples: print () print (80*'-') print ("Testing: %s" % s) s = binascii.unhexlify(s) (decoded, summary) = CodecManager.decode('map.%s' % pdu, s) print ("Decoded: %s\nSummary: %s" % (decoded, summary)) (reencoded, summary) = CodecManager.encode('map.%s' % pdu, decoded) print ("Reencoded: %s\nSummary: %s" % (binascii.hexlify(reencoded), summary)) print ("Original : %s" % binascii.hexlify(s)) assert(s == reencoded) print () print (80*'-') print ("Direct encoding testing") # Explicit encoding test sriSmRes = { 'imsi': '\x91\x10\x32\x54', 'locationInfoWithLMSI': { 'lmsi': '\x01\x02\x03\x04', 'networkNode-Number': '\x91\x22\x22\x22\x22\x22', }
print 80*'-' print "MAP (Phase 2+) Codec unit tests" print 80*'-' samples = [ ('RoutingInfoForSM-Arg', sendRoutingInfoForSMArg), ] for pdu, s in samples: print print 80*'-' print "Testing: %s" % s s = binascii.unhexlify(s) (decoded, summary) = CodecManager.decode('map.%s' % pdu, s) print "Decoded: %s\nSummary: %s" % (decoded, summary) (reencoded, summary) = CodecManager.encode('map.%s' % pdu, decoded) print "Reencoded: %s\nSummary: %s" % (binascii.hexlify(reencoded), summary) print "Original : %s" % binascii.hexlify(s) assert(s == reencoded) print print 80*'-' print "Direct encoding testing" # Explicit encoding test sriSmRes = { 'imsi': '\x91\x10\x32\x54', 'locationInfoWithLMSI': { 'lmsi': '\x01\x02\x03\x04', 'networkNode-Number': '\x91\x22\x22\x22\x22\x22', }