WAND Network Research Group University of Waikato Crest Of Arms

Scamper

scamper is a program that is able to conduct Internet measurement tasks to large numbers of IPv4 and IPv6 addresses, in parallel, to fill a specified packets-per-second rate. Currently, it supports the well-known ping and traceroute techniques.

scamper's developer is Matthew Luckie, member of the WAND group in the Computer Science Department at the University of Waikato.

The development of scamper was funded by the WIDE Project in association with CAIDA for the 12 month period ending April 2005.

Source Code

The current snapshot of scamper's source code is cvs-20070523p, available here. The code should compile and run under FreeBSD, OpenBSD, NetBSD, Linux 2.4 / 2.6, Mac OS X, Solaris, and DragonFly.

All releases of scamper are licensed under the GPL v2.

Network Research

scamper has been used in a small number of projects to date. 

Luckie, M., Hyun, Y. and Huffaker, B. (2008)  Traceroute Probe Method and Forward IP Path Inference.  Proceedings of Internet Measurement Conference 2008. [PDF] [scamper 20080808b snapshot] [data]

Luckie, M., Cho, K., and Owens, B. (2005)  Inferring and Debugging Path MTU Discovery Failures.  Proceedings of Internet Measurement Conference 2005. [PDF] [scamper 20060331 snapshot]

Cho, K., Luckie, M., and Huffaker, B. (2004)  Identifying IPv6 Network Problems in the Dual-Stack World.  Proceedings of SIGCOMM Network Troubleshooting Workshop. [PDF] [scamper 20040613 snapshot] [tools]

scamper is the data collection tool used in the CAIDA IPv6 AS Core poster, and is part of CAIDA's Internet measurement infrastructure, Archipelago.

A third-party library written by Young Hyun at CAIDA for reading warts files is available at RubyForge.

Usage

A man page is available here.

usage: scamper [-?46Pv] [-H holdtime] [-M monitorname] [-p pps]
               [-s sport] [-o outfile] [-O outtype]
               [-c command]
               [-D port | -i addr 1..N | listfile]

            -? give an overview of the usage of scamper
            -4 only open IPv4 sockets
            -6 only open IPv6 sockets
            -c command string (default: trace)
            -D start as a daemon listening for commands on a port
            -H time to hold trace for delayed responses (0 < holdtime < 255)
            -i IP addresses to trace provided on the command line
            -M specify the canonical name of the monitor
            -o specify the file to write output to
            -O specify the type of output [warts | traceroute]
            -p number of packets per second to send (1 <= pps <= 1000)
            -P use a datalink to get tx timestamps for outgoing probes
            -s source port to use
            -v output the version of scamper this binary is

Features

scamper has three modes of operation. scamper can be fed a list of IP addresses to probe in a text file e.g.

scamper <file>
or it can be fed a list of IP addresses on the command line, e.g.
scamper -i <addr 1> <addr 2> ... <addr N>
or it can be remotely controlled using a control socket, listening on a port specified as follows:
scamper -D <port>
scamper can do ICMP-based Path MTU discovery. scamper starts with the outgoing interface's MTU and discovers the location of Path MTU bottlenecks. Recent revision of scamper do a PMTUD search when an ICMP fragmentation required message is not returned to establish the PMTU to the next point in the network, followed by a TTL limited search to infer the where failure appears to occur.
scamper -c "trace -M"
scamper will use a datalink such as BPF under BSD or PF_PACKET under Linux > 2.2 to obtain a more accurate transmit timestamp with
scamper -P
scamper will output the supported flags with
scamper -?

Building Scamper

The source code includes both a BSD Makefile and a GNU Makefile.  If you're compiling scamper on FreeBSD / NetBSD / OpenBSD, you can simply type 'make'.  If you're compiling scamper on Mac OS X or Linux, you want to compile with 'make -f Makefile.gnu'

It is strongly recommended that you build with make WITH_DEBUG=yes

scamper will output lots of useful debugging information on stderr and build with debugging symbols in this case.  In the event that scamper does not behave as expected, the stderr and core files will be necessary to enable the problem to be debugged.  Please redirect stderr to a file, such as with

scamper -i 130.217.251.39 2>err

Release Announcements

If you would like to receive notifications of future releases of scamper, you may subscribe to the receive only mailing list scamper-announce by filling out this form.

Matthew Luckie, mjl at wand.net.nz