Packet Construction and Protocol Testing...

gnn at freebsd.org gnn at freebsd.org
Thu Jul 20 09:32:06 UTC 2006


Hi,

Sorry for the length of this email but I figured I'd get this out
early in case there was anyone else who wanted to play with this.

I have now gotten out version 0.1 of the Packet Construction Set.
This is a set of Python libraries which make writing protocol testing
software much easier.  Of course, you have to know Python, but many
people do, and I favor it strongly over other scripting choices.  The
Summer of Code student I'm working with has also been using this
library, with favorable results.

The Source Forge page is here:

http://sourceforge.net/projects/pcs

and the shar files submitted to get the ports created are now on:

http://www.freebsd.org/~gnn/pcs.port.shar
http://www.freebsd.org/~gnn/py-pypcap.shar

The point of all this is to be able to write better protocol level
tests for our network stack.  Examples are in the scripts/ and tests/
directories of the package but a quick snippet may give a good idea of
what I'm getting at:

    def test_icmpv4_ping(self):
        ip = ipv4()
        ip.version = 4
        ip.hlen = 5
        ip.tos = 0
        ip.length = 84
        ip.id = 1
        ip.flags = 0
        ip.offset = 0
        ip.ttl = 33
        ip.protocol = IPPROTO_ICMP
        ip.src = 2130706433
        ip.dst = 2130706433

        icmp = icmpv4()
        icmp.type = 8
        icmp.code = 0
        icmp.cksum = 0
        
        echo = icmpv4echo()
        echo.id = 32767
        echo.seq = 1

        lo = localhost()
        lo.type = 2
        packet = Chain([lo, ip, icmp, echo])
        
        input = PcapConnector("lo0")
        input.setfilter("icmp")

        output = PcapConnector("lo0")
        assert (ip != None)

        out = output.write(packet.bytes, 88)
        assert (out == 88)

This code sends a quick and dirty, ICMPv4 ping packet on localhost.
The point of all this is to be able to specify packets easly (see
pcs/packets/xxx.py) and then to treat the packet as an object.

I intend to write up a paper on this stuff as well.  There is
currently a simple manual (PDF and LaTeX) in the package.

Later,
George



More information about the freebsd-net mailing list