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