Пример #1
0
    def test_pcap_write(self):
        """Test the underlying __compare__ functionality of the
        packet.  Two packets constructed from the same bytes should be
        equal and two that are not should not be equal."""
        from pcs.pcap import DLT_NULL
        # Create a vanilla ping packet
        ip = ipv4()

        ip.version = 4
        ip.hlen = 5
        ip.tos = 0
        ip.length = 64
        ip.id = 1
        ip.flags = 0
        ip.offset = 0
        ip.ttl = 64
        ip.protocol = IPPROTO_ICMP
        ip.src = inet_atol("127.0.0.1")
        ip.dst = inet_atol("127.0.0.1")

        icmp = icmpv4()
        icmp.type = 8
        icmp.code = 0

        echo = icmpv4echo()
        echo.id = 32767
        echo.seq = 1

        lo = localhost()
        lo.type = 2

        packet = Chain([lo, ip, icmp, echo])

        outfile = PcapDumpConnector("pcaptest.dump", DLT_NULL)
        outfile.write(packet.bytes)
        outfile.close()

        infile = PcapConnector("pcaptest.dump")
        packet = infile.read()
        ipnew = ipv4(packet[infile.dloff:len(packet)])
        assert (ip != None)
        assert (ipnew != None)
        self.assertEqual(ip, ipnew, "packets should be equal but are not")
Пример #2
0
    def test_pcap_write(self):
        """Test the underlying __compare__ functionality of the
        packet.  Two packets constructed from the same bytes should be
        equal and two that are not should not be equal."""
        from pcs.pcap import DLT_NULL
        # Create a vanilla ping packet
        ip = ipv4()

        ip.version = 4
        ip.hlen = 5
        ip.tos = 0
        ip.length = 64
        ip.id = 1
        ip.flags = 0
        ip.offset = 0
        ip.ttl = 64
        ip.protocol = IPPROTO_ICMP
        ip.src = inet_atol("127.0.0.1")
        ip.dst = inet_atol("127.0.0.1")
        
        icmp = icmpv4()
        icmp.type = 8
        icmp.code = 0
        
        echo = icmpv4echo()
        echo.id = 32767
        echo.seq = 1
        
        lo = localhost()
        lo.type = 2

        packet = Chain([lo, ip, icmp, echo])

        outfile = PcapDumpConnector("pcaptest.dump", DLT_NULL)
        outfile.write(packet.bytes)
        outfile.close()
        
        infile = PcapConnector("pcaptest.dump")
        packet = infile.read()
        ipnew = ipv4(packet[infile.dloff:len(packet)])
        assert (ip != None)
        assert (ipnew != None)
        self.assertEqual(ip, ipnew, "packets should be equal but are not")
Пример #3
0
def main():
    from pcs import PcapConnector, TimeoutError, LimitReachedError
    from pcs.packets.ethernet import ethernet
    from pcs.packets.ipv4 import ipv4
    from pcs.packets.icmpv4 import icmpv4
    from pcs.packets.icmpv4 import icmpv4echo
    from pcs.packets.icmpv4 import ICMP_ECHO
    #from pcs.packets.icmpv4 import ICMP_ECHOREPLY

    fxp0 = PcapConnector("fxp0")
    filter = ethernet() / ipv4() / icmpv4(type=ICMP_ECHO) / icmpv4echo()

    #from pcs.bpf import program
    #bp = fxp0.make_bpf_program(filter)
    #for lp in bp.disassemble():
    #    print lp

    #fxp0.setfilter('icmp')
    #fxp0.set_bpf_program(bp)

    print "Expecting at least 1 ICMP echo request within 10 seconds."
    try:
        fxp0.expect([filter], 10)
    except LimitReachedError:
        print "Limit reached."
        sys.exit(1)
    except TimeoutError:
        print "Timed out."
        sys.exit(1)

    nmatches = 0
    if fxp0.matches is not None:
        nmatches = len(fxp0.matches)
    print "Matched", nmatches, "chain(s)."

    sys.exit(0)
Пример #4
0
def main():
    from pcs import PcapConnector, TimeoutError, LimitReachedError
    from pcs.packets.ethernet import ethernet
    from pcs.packets.ipv4 import ipv4
    from pcs.packets.icmpv4 import icmpv4
    from pcs.packets.icmpv4 import icmpv4echo
    from pcs.packets.icmpv4 import ICMP_ECHO
    #from pcs.packets.icmpv4 import ICMP_ECHOREPLY

    fxp0 = PcapConnector("fxp0")
    filter = ethernet() / ipv4() / icmpv4(type=ICMP_ECHO) / icmpv4echo()

    #from pcs.bpf import program
    #bp = fxp0.make_bpf_program(filter)
    #for lp in bp.disassemble():
    #    print lp

    #fxp0.setfilter('icmp')
    #fxp0.set_bpf_program(bp)

    print "Expecting at least 1 ICMP echo request within 10 seconds."
    try:
        fxp0.expect([filter], 10)
    except LimitReachedError:
        print "Limit reached."
        sys.exit(1)
    except TimeoutError:
        print "Timed out."
        sys.exit(1)

    nmatches = 0
    if fxp0.matches is not None:
        nmatches = len(fxp0.matches)
    print "Matched", nmatches, "chain(s)."

    sys.exit(0)
Пример #5
0
    def test_pcap_live(self):
        """Test live injection and reception.

        This test requires threads and must be run as root to succeed."""
        import threading

        e = ethernet()
        assert (e != None)
        e.src = "\x00\xbd\x03\x07\xfa\x00"
        e.dst = "\x00\xbd\x03\x07\xfa\x00"
        e.type = 0x0800

        # Create a vanilla ping packet
        ip = ipv4()

        ip.version = 4
        ip.hlen = 5
        ip.tos = 0
        ip.length = 64
        ip.id = 1
        ip.flags = 0
        ip.offset = 0
        ip.ttl = 64
        ip.protocol = IPPROTO_ICMP
        ip.src = inet_atol("192.0.2.1")
        ip.dst = inet_atol("192.0.2.1")

        icmp = icmpv4()
        icmp.type = 8
        icmp.code = 0

        echo = icmpv4echo()
        echo.id = 54321
        echo.seq = 12345

        ip.length = len(ip.bytes) + len(icmp.bytes) + len(echo.bytes)

        packet = Chain([e, ip, icmp, echo])

        packet.calc_checksums()
        packet.encode()

        import os
        uname = os.uname()[0]
        if uname == "FreeBSD":
            devname = "edsc0"
        elif uname == "Linux":
            devname = "lo"
        elif uname == "Darwin":
            devname = "en0"
        else:
            print "unknown host os %s" % uname
            return

        wfile = PcapConnector(devname)
        rfile = PcapConnector(devname)
        rfile.setfilter("icmp")

        count = wfile.write(packet.bytes, 42)
        assert (count == 42)

        got = ethernet(rfile.read())
        ip = got.data
        ping = ip.data

        self.assertEqual(ping, icmp)
Пример #6
0
    def test_pcap_live(self):
        """Test live injection and reception.

        This test requires threads and must be run as root to succeed."""
        import threading

        e = ethernet()
        assert (e != None)
        e.src = "\x00\xbd\x03\x07\xfa\x00"
        e.dst = "\x00\xbd\x03\x07\xfa\x00"
        e.type = 0x0800

        # Create a vanilla ping packet
        ip = ipv4()

        ip.version = 4
        ip.hlen = 5
        ip.tos = 0
        ip.length = 64
        ip.id = 1
        ip.flags = 0
        ip.offset = 0
        ip.ttl = 64
        ip.protocol = IPPROTO_ICMP
        ip.src = inet_atol("192.0.2.1")
        ip.dst = inet_atol("192.0.2.1")
        
        icmp = icmpv4()
        icmp.type = 8
        icmp.code = 0
        
        echo = icmpv4echo()
        echo.id = 54321
        echo.seq = 12345

        ip.length = len(ip.bytes) + len(icmp.bytes) + len(echo.bytes)

        packet = Chain([e, ip, icmp, echo])

        packet.calc_checksums()
	packet.encode()

	import os
	uname = os.uname()[0]
	if uname == "FreeBSD":
	    devname = "edsc0"
	elif uname == "Linux":
	    devname = "lo"
        elif uname == "Darwin":
            devname = "en0"
	else:
	    print "unknown host os %s" % uname
	    return

        wfile = PcapConnector(devname)
        rfile = PcapConnector(devname)
	rfile.setfilter("icmp")

        count = wfile.write(packet.bytes, 42)
	assert (count == 42)

        got = ethernet(rfile.read())
        ip = got.data
        ping = ip.data

        self.assertEqual(ping, icmp)