Beispiel #1
0
    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))
Beispiel #2
0
 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)
Beispiel #3
0
    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))
Beispiel #4
0
		<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
Beispiel #5
0
<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


	
	
Beispiel #6
0
	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)
Beispiel #7
0
# 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)
Beispiel #8
0
    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'
Beispiel #9
0
        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
Beispiel #11
0
<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 ()


	
	
Beispiel #12
0
		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' }),
	]
Beispiel #13
0
	
	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',
		}
Beispiel #14
0
	
	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',
		}