def testPacketParsing(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([ ('foobar', 'testHost', 0x43A2), ]) proto.addProto(0xF00F, p1) proto.datagramReceived("\x43\xA2" #source + "\xf0\x0f" #dest + "\x00\x06" #len + "\xDE\xAD" #check + "foobar", partial=0, dest='dummy', source='testHost', protocol='dummy', version='dummy', ihl='dummy', tos='dummy', tot_len='dummy', fragment_id='dummy', fragment_offset='dummy', dont_fragment='dummy', more_fragments='dummy', ttl='dummy', ) assert not p1.expecting, \ 'Should not expect any more packets, but still want %r' % p1.expecting
def testWrongProtoNotSeen(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([]) proto.addProto(1, p1) proto.datagramReceived( b"\x43\xA2" # source b"\xf0\x0f" # dest b"\x00\x06" # len b"\xDE\xAD" # check b"foobar", partial=0, dest=b"dummy", source=b"testHost", protocol=b"dummy", version=b"dummy", ihl=b"dummy", tos=b"dummy", tot_len=b"dummy", fragment_id=b"dummy", fragment_offset=b"dummy", dont_fragment=b"dummy", more_fragments=b"dummy", ttl=b"dummy", )
def testWrongProtoNotSeen(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([]) proto.addProto(1, p1) proto.datagramReceived( "\x43\xA2" #source + "\xf0\x0f" #dest + "\x00\x06" #len + "\xDE\xAD" #check + "foobar", partial=0, dest='dummy', source='testHost', protocol='dummy', version='dummy', ihl='dummy', tos='dummy', tot_len='dummy', fragment_id='dummy', fragment_offset='dummy', dont_fragment='dummy', more_fragments='dummy', ttl='dummy', )
def testPacketParsing(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([ (b"foobar", b"testHost", 0x43A2), ]) proto.addProto(0xF00F, p1) proto.datagramReceived( b"\x43\xA2" # source b"\xf0\x0f" # dest b"\x00\x06" # len b"\xDE\xAD" # check b"foobar", partial=0, dest=b"dummy", source=b"testHost", protocol=b"dummy", version=b"dummy", ihl=b"dummy", tos=b"dummy", tot_len=b"dummy", fragment_id=b"dummy", fragment_offset=b"dummy", dont_fragment=b"dummy", more_fragments=b"dummy", ttl=b"dummy", ) assert not p1.expecting, ( "Should not expect any more packets, but still want %r" % p1.expecting)
def testPacketParsing(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([ (b'foobar', b'testHost', 0x43A2), ]) proto.addProto(0xF00F, p1) proto.datagramReceived(chr(67)+chr(162) #source chr(240)+chr(15) #dest chr(0)+chr(6) #len chr(222)+chr(173) #check b"foobar", partial=0, dest=b'dummy', source=b'testHost', protocol=b'dummy', version=b'dummy', ihl=b'dummy', tos=b'dummy', tot_len=b'dummy', fragment_id=b'dummy', fragment_offset=b'dummy', dont_fragment=b'dummy', more_fragments=b'dummy', ttl=b'dummy', ) assert not p1.expecting, \ 'Should not expect any more packets, but still want %r' % p1.expecting
def testAddingBadProtos_TooBig2(self): """Adding a protocol with a number >=2**16 raises an exception.""" e = rawudp.RawUDPProtocol() try: e.addProto(2**16+1, protocol.DatagramProtocol()) except TypeError, e: if e.args == ('Added protocol must fit in 16 bits',): pass else: raise
def testAddingBadProtos_TooSmall(self): """Adding a protocol with a negative number raises an exception.""" e = rawudp.RawUDPProtocol() try: e.addProto(-1, protocol.DatagramProtocol()) except TypeError, e: if e.args == ('Added protocol must be positive or zero',): pass else: raise
def testAddingBadProtos_WrongLevel(self): """Adding a wrong level protocol raises an exception.""" e = rawudp.RawUDPProtocol() try: e.addProto(42, "silliness") except TypeError, e: if e.args == ('Added protocol must be an instance of DatagramProtocol',): pass else: raise
def testAddingBadProtos_TooBig(self): """Adding a protocol with a number >=2**16 raises an exception.""" e = rawudp.RawUDPProtocol() try: e.addProto(2**16, protocol.DatagramProtocol()) except TypeError as e: if e.args == ('Added protocol must fit in 16 bits',): pass else: raise else: raise AssertionError('addProto must raise an exception for bad protocols')
def testAddingBadProtos_TooSmall(self): """Adding a protocol with a negative number raises an exception.""" e = rawudp.RawUDPProtocol() try: e.addProto(-1, protocol.DatagramProtocol()) except TypeError as e: if e.args == ("Added protocol must be positive or zero", ): pass else: raise else: raise AssertionError( "addProto must raise an exception for bad protocols")
def testMultiplePackets(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([ (b'foobar', b'testHost', 0x43A2), (b'quux', b'otherHost', 0x33FE), ]) proto.addProto(0xF00F, p1) proto.datagramReceived( b"\x43\xA2" #source b"\xf0\x0f" #dest b"\x00\x06" #len b"\xDE\xAD" #check b"foobar", partial=0, dest=b'dummy', source=b'testHost', protocol=b'dummy', version=b'dummy', ihl=b'dummy', tos=b'dummy', tot_len=b'dummy', fragment_id=b'dummy', fragment_offset=b'dummy', dont_fragment=b'dummy', more_fragments=b'dummy', ttl=b'dummy', ) proto.datagramReceived( b"\x33\xFE" #source b"\xf0\x0f" #dest b"\x00\x05" #len b"\xDE\xAD" #check b"quux", partial=0, dest=b'dummy', source=b'otherHost', protocol=b'dummy', version=b'dummy', ihl=b'dummy', tos=b'dummy', tot_len=b'dummy', fragment_id=b'dummy', fragment_offset=b'dummy', dont_fragment=b'dummy', more_fragments=b'dummy', ttl=b'dummy', ) assert not p1.expecting, \ 'Should not expect any more packets, but still want %r' % p1.expecting
def testWrongProtoNotSeen(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([]) proto.addProto(1, p1) proto.datagramReceived(chr(67)+chr(162) #source chr(240)+chr(15) #dest chr(0)+chr(6) #len chr(222)+chr(173) #check b"foobar", partial=0, dest=b'dummy', source=b'testHost', protocol=b'dummy', version=b'dummy', ihl=b'dummy', tos=b'dummy', tot_len=b'dummy', fragment_id=b'dummy', fragment_offset=b'dummy', dont_fragment=b'dummy', more_fragments=b'dummy', ttl=b'dummy', )
def testDemuxing(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([ ('foobar', 'testHost', 0x43A2), ('quux', 'otherHost', 0x33FE), ]) proto.addProto(0xF00F, p1) p2 = MyProtocol([ ('quux', 'otherHost', 0xA401), ('foobar', 'testHost', 0xA302), ]) proto.addProto(0xB050, p2) proto.datagramReceived("\xA4\x01" #source + "\xB0\x50" #dest + "\x00\x05" #len + "\xDE\xAD" #check + "quux", partial=0, dest='dummy', source='otherHost', protocol='dummy', version='dummy', ihl='dummy', tos='dummy', tot_len='dummy', fragment_id='dummy', fragment_offset='dummy', dont_fragment='dummy', more_fragments='dummy', ttl='dummy', ) proto.datagramReceived("\x43\xA2" #source + "\xf0\x0f" #dest + "\x00\x06" #len + "\xDE\xAD" #check + "foobar", partial=0, dest='dummy', source='testHost', protocol='dummy', version='dummy', ihl='dummy', tos='dummy', tot_len='dummy', fragment_id='dummy', fragment_offset='dummy', dont_fragment='dummy', more_fragments='dummy', ttl='dummy', ) proto.datagramReceived("\x33\xFE" #source + "\xf0\x0f" #dest + "\x00\x05" #len + "\xDE\xAD" #check + "quux", partial=0, dest='dummy', source='otherHost', protocol='dummy', version='dummy', ihl='dummy', tos='dummy', tot_len='dummy', fragment_id='dummy', fragment_offset='dummy', dont_fragment='dummy', more_fragments='dummy', ttl='dummy', ) proto.datagramReceived("\xA3\x02" #source + "\xB0\x50" #dest + "\x00\x06" #len + "\xDE\xAD" #check + "foobar", partial=0, dest='dummy', source='testHost', protocol='dummy', version='dummy', ihl='dummy', tos='dummy', tot_len='dummy', fragment_id='dummy', fragment_offset='dummy', dont_fragment='dummy', more_fragments='dummy', ttl='dummy', ) assert not p1.expecting, \ 'Should not expect any more packets, but still want %r' % p1.expecting assert not p2.expecting, \ 'Should not expect any more packets, but still want %r' % p2.expecting
# Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. from twisted.internet import reactor, protocol from twisted.pair import ethernet, rawudp, ip from twisted.pair import tuntap class MyProto(protocol.DatagramProtocol): def datagramReceived(self, *a, **kw): print a, kw p_udp = rawudp.RawUDPProtocol() p_udp.addProto(42, MyProto()) p_ip = ip.IPProtocol() p_ip.addProto(17, p_udp) p_eth = ethernet.EthernetProtocol() p_eth.addProto(0x800, p_ip) port = tuntap.TuntapPort(interface='tap0', proto=p_eth, reactor=reactor) port.startListening() reactor.run()
def testDemuxing(self): proto = rawudp.RawUDPProtocol() p1 = MyProtocol([ (b"foobar", b"testHost", 0x43A2), (b"quux", b"otherHost", 0x33FE), ]) proto.addProto(0xF00F, p1) p2 = MyProtocol([ (b"quux", b"otherHost", 0xA401), (b"foobar", b"testHost", 0xA302), ]) proto.addProto(0xB050, p2) proto.datagramReceived( b"\xA4\x01" # source b"\xB0\x50" # dest b"\x00\x05" # len b"\xDE\xAD" # check b"quux", partial=0, dest=b"dummy", source=b"otherHost", protocol=b"dummy", version=b"dummy", ihl=b"dummy", tos=b"dummy", tot_len=b"dummy", fragment_id=b"dummy", fragment_offset=b"dummy", dont_fragment=b"dummy", more_fragments=b"dummy", ttl=b"dummy", ) proto.datagramReceived( b"\x43\xA2" # source b"\xf0\x0f" # dest b"\x00\x06" # len b"\xDE\xAD" # check b"foobar", partial=0, dest=b"dummy", source=b"testHost", protocol=b"dummy", version=b"dummy", ihl=b"dummy", tos=b"dummy", tot_len=b"dummy", fragment_id=b"dummy", fragment_offset=b"dummy", dont_fragment=b"dummy", more_fragments=b"dummy", ttl=b"dummy", ) proto.datagramReceived( b"\x33\xFE" # source b"\xf0\x0f" # dest b"\x00\x05" # len b"\xDE\xAD" # check b"quux", partial=0, dest=b"dummy", source=b"otherHost", protocol=b"dummy", version=b"dummy", ihl=b"dummy", tos=b"dummy", tot_len=b"dummy", fragment_id=b"dummy", fragment_offset=b"dummy", dont_fragment=b"dummy", more_fragments=b"dummy", ttl=b"dummy", ) proto.datagramReceived( b"\xA3\x02" # source b"\xB0\x50" # dest b"\x00\x06" # len b"\xDE\xAD" # check b"foobar", partial=0, dest=b"dummy", source=b"testHost", protocol=b"dummy", version=b"dummy", ihl=b"dummy", tos=b"dummy", tot_len=b"dummy", fragment_id=b"dummy", fragment_offset=b"dummy", dont_fragment=b"dummy", more_fragments=b"dummy", ttl=b"dummy", ) assert not p1.expecting, ( "Should not expect any more packets, but still want %r" % p1.expecting) assert not p2.expecting, ( "Should not expect any more packets, but still want %r" % p2.expecting)