scamper is a parallelised packet-prober capable of large-scale Internet measurement using many different measurement techniques. Briefly, scamper obtains a sequence of measurement tasks from the input sources and probes each in parallel as needed to meet a packets-per-second rate specified on the command line. Tasks currently being probed are held centrally by scamper in a set of queues the probe queue if the task is ready to probe, the wait queue if it is waiting for time to elapse, and the done queue if the task has completed and is ready to be written out to disk. Each measurement technique is implemented in a separate module that includes the logic for conducting the measurement as well as the input/output routines for reading and writing measurement results, allowing measurement techniques to be implemented independently of each other. When a new measurement task is instantiated, the task attaches a set of callback routines to itself that \scamper then uses to direct the measurement as events occur, such as when it is time to probe, when a response is received, or when a time-out elapses. Sockets required as part of a measurement are held centrally by scamper in order to share them amongst tasks where possible so that resource requirements are reduced. Finally, scamper centrally maintains a collection of output files where completed measurements are written.
The scamper tools integrated in the mPlane framework are: ping, traceroute (various versions), tracelb and tracebox.
Metrics
Scamper's mPlane interface also allows to run the following tools, all tools are available for IPv4 and IPv6 networks:
Capabilities
Scamper's mPlane interface has 7 capabilities, each of them is available for both IPv4 and IPv6 networks. To obtain the name of IPv4 and IPv6 versions of a capability, replace V respectively by 4 and 6. Every capability
comes with multiple parameters that are documented in the Scamper man pages and in the registry file. Moreover, as many parameters are specific and not always needed, default value suggestion are available in the README file.
Capabilities details
|mplane| showcap scamper-ping-average-ip4
capability: measure
label : scamper-ping-average-ip4
link : /
token : 2378eb9c718a2a2038a71f7afc10a73e
when : now ... future / 1s
registry : http://ict-mplane.eu/registry/core
parameters ( 9):
destination.ip4: *
scamper.ping.tos: 0 ... 255
scamper.ping.size: 84 ... 140
scamper.ping.dport: 0 ... 65535
scamper.ping.sport: 0 ... 65535
scamper.ping.ttl: 0 ... 255
scamper.ping.method: tcp-ack, udp-dport, tcp-ack-sport,icmp-echo, udp, icmp-time
scamper.ping.rr: *
source.ip4: *
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 4):
delay.twoway.icmp.us.min
delay.twoway.icmp.us.mean
delay.twoway.icmp.us.max
delay.twoway.icmp.count
|mplane| showcap scamper-ping-average-ip4
capability: measure
label : scamper-ping-average-ip4
link : /
token : 2378eb9c718a2a2038a71f7afc10a73e
when : now ... future / 1s
registry : http://ict-mplane.eu/registry/core
parameters ( 9):
destination.ip4: *
scamper.ping.tos: 0 ... 255
scamper.ping.size: 84 ... 140
scamper.ping.dport: 0 ... 65535
scamper.ping.sport: 0 ... 65535
scamper.ping.ttl: 0 ... 255
scamper.ping.method: tcp-ack, udp-dport, tcp-ack-sport,icmp-echo, udp, icmp-time
scamper.ping.rr: *
source.ip4: *
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 4):
delay.twoway.icmp.us.min
delay.twoway.icmp.us.mean
delay.twoway.icmp.us.max
delay.twoway.icmp.count
|mplane| showcap scamper-trace-standard-ip4
capability: measure
label : scamper-trace-standard-ip4
link : /
token : b2855fd8415186bc582fa0ddeba433f2
when : now ... future
registry : http://ict-mplane.eu/registry/core
parameters (19):
scamper.trace.firsthop: 0 ... 255
scamper.trace.method: UDP, TCP, ICMP,UDP-paris, ICMP-paris, TCP-ACK
scamper.trace.tos: 0 ... 255
scamper.trace.gaplimit: 0 ... 255
scamper.trace.loops: 0 ... 255
scamper.trace.confidence: 95.0 ... 99.0
scamper.trace.attempts: 0 ... 255
scamper.trace.T: *
destination.ip4: *
scamper.trace.M: *
scamper.trace.maxttl: 0 ... 255
scamper.trace.gapaction: 1 ... 2
source.ip4: *
scamper.trace.Q: *
scamper.trace.loopaction: 0.0 ... 1.0
scamper.trace.dport: 0.0 ... 65535.0
scamper.trace.sport: 0.0 ... 65535.0
scamper.trace.waitprobe: 0 ... 2550000
scamper.trace.wait: 0 ... 255
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 3):
scamper.trace.hop.ip4
rtt.ms
rtt.us
|mplane| showcap scamper-tracelb-standard-ip4
capability: measure
label : scamper-tracelb-standard-ip4
link : /
token : 68d36e39841c7ed875563ff1942b6d77
when : now ... future
registry : http://ict-mplane.eu/registry/core
parameters (13):
scamper.tracelb.dport: 0 ... 65535
scamper.tracelb.maxprobec: 1 ... 10000
scamper.tracelb.method: tcp-sport, udp-dport, tcp-ack-sport,udp-dport, icmp-echo, udp-sport
scamper.tracelb.attempts: 0 ... 255
destination.ip4: *
scamper.tracelb.sport: 0 ... 65535
scamper.tracelb.firsthop: 0 ... 255
source.ip4: *
scamper.tracelb.confidence: 95 ... 99
scamper.tracelb.gaplimit: 0 ... 255
scamper.tracelb.waitprobe: 0 ... 2550000
scamper.tracelb.waittimeout: 0 ... 255
scamper.tracelb.tos: 0 ... 255
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 1):
scamper.tracelb.result
|mplane| showcap scamper-tracebox-standard-ip4
capability: measure
label : scamper-tracebox-standard-ip4
link : /
token : 67f7f831d6c511b6b7cc31ffd642c3aa
when : now ... future
registry : http://ict-mplane.eu/registry/core
parameters ( 2):
destination.ip4: *
source.ip4: *
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 2):
scamper.tracebox.hop.ip4
scamper.tracebox.hop.modifications
|mplane| showcap scamper-tracebox-specific-ip4
capability: measure
label : scamper-tracebox-specific-ip4
link : /
token : 9684b58ab96251ce8e279257d533289f
when : now ... future
registry : http://ict-mplane.eu/registry/core
parameters ( 4):
destination.ip4: *
scamper.tracebox.probe: *
source.ip4: *
scamper.tracebox.dport: 0 ... 65535
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 2):
scamper.tracebox.hop.ip4
scamper.tracebox.hop.modifications
|mplane| showcap scamper-tracebox-specific-quotesize-ip4
capability: measure
label : scamper-tracebox-specific-quotesize-ip4
link : /
token : 2f733b848adc6d9e604569adc71b9bb0
when : now ... future
registry : http://ict-mplane.eu/registry/core
parameters ( 4):
destination.ip4: *
scamper.tracebox.probe: *
source.ip4: *
scamper.tracebox.dport: 0 ... 65535
metadata ( 3):
System_type: Scamper
System_ID: Scamper-Proxy
System_version: 0.1
results ( 3):
scamper.tracebox.hop.ip4
scamper.tracebox.hop.modifications
scamper.tracebox.hop.icmp.payload.len
Scamper is coded in C and no additional framwork/libraries are needed. It is fully standalone (e.g.: It does not require any external srevices/applications to operate). It should compile and run under FreeBSD, OpenBSD, NetBSD, Linux (Ubuntu), MacOS X, Solaris, Windows and DragonFly.
Integration into te Monitored Network
The scamper probe will typically be deployed within the clients networks, but can technically be deployed anywhere in the Internet. Its only requirement is to be deployed in an ICMP-friendly network environment (e.g.: In-network firewalls allowing ingress ICMP traffic), and a UDP-friendly network environment for the UDP-based probes.
Building scamper from the source is very easy:
$ ./configure
$ make
$ sudo make install
$ (optional) setuid 4755 /usr/local/bin/scamper
Thanks to the support of the mPlane project we extended scamper functionalities with the following features:
The tracebox component has been merged into the Scamper component.