IP Route Survey (IPRS)

IPRS is an initiative to continuously monitor IP-level routing across the internet. This is done through the regular collection of traceroute-style measurements from multiple vantage points towards a significant portion of the internet’s routable address blocks. The survey is conducted by the Dioptra research group at Sorbonne University’s LIP6 computer science laboratory.

As of December 2023, IPRS conducts four daily IPv4 snapshots featuring multipath route traces from ten vantage points towards all routable IPv4 /24 prefixes. So as to economize on M-Lab data storage, a subset of these measurements is being selected to be offered through M-Lab.

Please cite this data set as follows: M-Lab’s Sorbonne IPRS Data Set, <date range used>. https://measurementlab.net/tests/iprs

Any IPRS IPv4 snapshots that are not yet available through M-Lab can be obtained upon request from the Dioptra group.

In addition, IPRS conducts one daily IPv6 snapshot with single-path route traces towards a substantial number of routable prefixes. These, too, can be obtained upon request from the Dioptra group.

Data

We provide two series of data sets for the IPRS data.

The first, iprs_index1, consists of metadata. As mentioned, IPRS data consists of a series of snapshots of IP-level routing in the internet. Each snapshot is associated with a unique identifier, or UUID. The metadata data set includes, for each snapshot:

  • its UUID
  • its date and time
  • whether it is present on M-Lab (if not, it can be obtained upon request from the Dioptra group)
  • whether it contains IPv4 data, IPv6 data, or both
  • additional metadata concerning the software versions that were used to obtain the snapshot, and their configuration

The second, iprs_data1, consists of the route trace data itself. The iprs1 schema is purposely compatible with the scamper1 schema that is used for M-Lab’s extensive existing Traceroute data set, so as to ease users’ ability to conduct queries across both data sets.

The differences between iprs1 and scamper1 are:

  • An iprs1 route trace is not towards a single destination address, but towards a destination prefix (currently /24 prefix)
  • iprs1’s id field allows IPRS data to be selected by snapshot, as indicated in the iprs_index1 table.
  • For the following data types that call for an integer value, iprs1 uses the INTEGER data type whereas scamper1 uses FLOAT:
    • raw.CycleStart.ID
    • raw.CycleStart.start_time
    • raw.Tracelb.userid
    • raw.Tracelb.probe_size
    • raw.Tracelb.firsthop
    • raw.Tracelb.attempts
    • raw.Tracelb.confidence
    • raw.Tracelb.tos
    • raw.Tracelb.gaplimit
    • raw.Tracelb.wait_timeout
    • raw.Tracelb.wait_probe
    • raw.Tracelb.probec
    • raw.Tracelb.probec_max
    • raw.Tracelb.nodec
    • raw.Tracelb.linkc
    • raw.CycleStop.ID
    • raw.CycleStop.stop_time
  • The following fields do not apply to IPRS data and are therefore left as NULL:
    • parser.Version
    • parser.Time
    • parser.ArchiveURL
    • parser.Filename
    • parser.Priority
    • parser.GitCommit
    • raw.Metadata.TracerouteCallerVersion
    • raw.Metadata.CachedResult
    • raw.Metadata.CachedUUID
    • raw.CycleStart.ID
    • raw.Tracelb.version
    • raw.Tracelb.userid
    • raw.Tracelb.start.Usec
    • raw.Tracelb.probe_size
    • raw.Tracelb.tos
    • raw.Tracelb.gaplimit
    • raw.Tracelb.wait_timeout
    • raw.Tracelb.wait_probe
    • raw.Tracelb.probec
    • raw.Tracelb.probec_max
    • raw.Tracelb.nodes.name
    • raw.Tracelb.nodes.q_ttl
    • raw.Tracelb.nodes.links.Links.Probes.Tx.Sec
    • raw.Tracelb.nodes.links.Links.Probes.Tx.Usec
    • raw.Tracelb.nodes.links.Links.Probes.Replies.Rx.Sec
    • raw.Tracelb.nodes.links.Links.Probes.Replies.Rx.Usec
    • raw.Tracelb.nodes.links.Links.Probes.Replies.icmp_q_tos
    • raw.CycleStop.ID
  • Links do not include unresponsive hosts
  • In the case of amplification (one probe receiving more than one reply), only one reply is retained, while raw.Tracelb.nodes.links.Links.Probes.Replyc indicates the total number of replies the probe received from this address.

If you wish to obtain IPRS data in other formats, or in greater detail, or additional data not published here, such as data obtained from IPv6 measurements, please contact the Dioptra team at Sorbonne University.

If you are interested in accessing IPRS data in BigQuery, please contact the M-Lab team!

Get more information at https://iprs.dioptra.io/

iprs_index1 Schema

Field name Type Description
id STRING UUID of the snapshot.
start_time TIMESTAMP When snapshot started U UTC YYYY-MM-DD HH:MM:SS
duration INTEGER Duration of the snapshots in seconds.
snapshot_status STRING The status of the snapshot. Possible values: finished (completed successfully), canceled (manually stopped), agent_failure (failed due to agents issues).
snapshot_labels STRING Labels of the snapshot.
num_agents INTEGER The number of agents that participated in carrying out the snapshot.
num_succesful_agents INTEGER The number of agents that successfully completed the snapshot.
sw_versions RECORD  
sw_versions.iris STRING iris version
sw_versions.diamond_miner STRING diamond-miner version
sw_versions.zeph STRING zeph version
sw_versions.caracal STRING caracal version
sw_versions.parser STRING parser version
IPV4 BOOLEAN Indicates whether the snapshot included route traces toward IPv4 addresses.
IPV6 BOOLEAN Indicates whether the snapshot included route traces toward IPv6 addresses.
is_published BOOLEAN Indicates whether the snapshot has been published to the iprs_data1 table.

iprs_data1 Schema

Field name Type Description
id STRING UUID of the snapshot.
parser RECORD Metadata about how the parser processed this measurement row.
parser.Version STRING N/A
parser.Time TIMESTAMP N/A
parser.ArchiveURL STRING N/A
parser.Filename STRING N/A
parser.Priority INTEGER N/A
parser.GitCommit STRING N/A
date DATE Date of the snapshot. Date is used by BigQuery to partition data to improve query performance. UTC YYYY-MM-DD as in the index, but without HH-MM-SS
raw RECORD All the data and metadata for a single route trace.
raw.Metadata RECORD  
raw.Metadata.UUID STRING Agent UUID
raw.Metadata.TracerouteCallerVersion STRING N/A
raw.Metadata.CachedResult BOOLEAN N/A
raw.Metadata.CachedUUID STRING N/A
raw.CycleStart RECORD  
raw.CycleStart.Type STRING The string “cycle-start”.
raw.CycleStart.list_name STRING The name of the IP list file (“/tmp/scamperctl:” for daemon mode, “default” for CLI).
raw.CycleStart.ID INTEGER N/A
raw.CycleStart.Hostname STRING The hostname of the machine running the traceroute.
raw.CycleStart.start_time INTEGER When traceroute started in Unix epoch.
raw.Tracelb RECORD  
raw.Tracelb.type STRING The string “tracelb”.
raw.Tracelb.version STRING N/A
raw.Tracelb.userid INTEGER N/A
raw.Tracelb.method STRING The trace method used by tracelb (“icmp-echo” for MDA traceroutes).
raw.Tracelb.src STRING Source address.
raw.Tracelb.dst STRING Destination address.
raw.Tracelb.start RECORD A timestamp when the traceroute started.
raw.Tracelb.start.Sec INTEGER Number of seconds since Unix epoch when the traceroute started.
raw.Tracelb.start.Usec INTEGER N/A
raw.Tracelb.probe_size INTEGER N/A
raw.Tracelb.firsthop INTEGER Where to start probing.
raw.Tracelb.attempts INTEGER Number of attempts per probe.
raw.Tracelb.confidence INTEGER Confidence level to attain.
raw.Tracelb.tos INTEGER N/A
raw.Tracelb.gaplimit INTEGER N/A
raw.Tracelb.wait_timeout INTEGER N/A
raw.Tracelb.wait_probe INTEGER N/A
raw.Tracelb.probec INTEGER N/A
raw.Tracelb.probec_max INTEGER N/A
raw.Tracelb.nodec INTEGER The number of nodes in the traceroute.
raw.Tracelb.linkc INTEGER The number of unique links in the traceroute.
raw.Tracelb.nodes RECORD  
raw.Tracelb.nodes.hop_id STRING  
raw.Tracelb.nodes.addr STRING The IP address of the node.
raw.Tracelb.nodes.name STRING N/A
raw.Tracelb.nodes.q_ttl INTEGER N/A
raw.Tracelb.nodes.linkc INTEGER The number of unique links for this node.
raw.Tracelb.nodes.links RECORD  
raw.Tracelb.nodes.links.Links RECORD  
raw.Tracelb.nodes.links.Links.Addr STRING The address in a link.
raw.Tracelb.nodes.links.Links.Probes RECORD The probes that observed this link.
raw.Tracelb.nodes.links.Links.Probes.Tx RECORD The timestamp of a probe.
raw.Tracelb.nodes.links.Links.Probes.Tx.Sec INTEGER N/A
raw.Tracelb.nodes.links.Links.Probes.Tx.Usec INTEGER N/A
raw.Tracelb.nodes.links.Links.Probes.Replyc INTEGER The number of replies this probe received from this address.
raw.Tracelb.nodes.links.Links.Probes.TTL INTEGER The TTL of the probe sent.
raw.Tracelb.nodes.links.Links.Probes.Attempt INTEGER The attempt number of this probe.
raw.Tracelb.nodes.links.Links.Probes.Flowid INTEGER The flow identifier of this probe.
raw.Tracelb.nodes.links.Links.Probes.Replies RECORD  
raw.Tracelb.nodes.links.Links.Probes.Replies.Rx RECORD The timestamp of a response.
raw.Tracelb.nodes.links.Links.Probes.Replies.Rx.Sec INTEGER N/A
raw.Tracelb.nodes.links.Links.Probes.Replies.Rx.Usec INTEGER N/A
raw.Tracelb.nodes.links.Links.Probes.Replies.TTL INTEGER The TTL of the received response packet.
raw.Tracelb.nodes.links.Links.Probes.Replies.RTT FLOAT The round trip time in milliseconds.
raw.Tracelb.nodes.links.Links.Probes.Replies.icmp_type INTEGER The type of ICMP response.
raw.Tracelb.nodes.links.Links.Probes.Replies.icmp_code INTEGER The code of the ICMP response.
raw.Tracelb.nodes.links.Links.Probes.Replies.icmp_q_tos INTEGER N/A
raw.Tracelb.nodes.links.Links.Probes.Replies.icmp_q_ttl INTEGER The “time to live” byte in the quoted IP packet probe.
raw.CycleStop RECORD  
raw.CycleStop.Type STRING The string “cycle-stop”.
raw.CycleStop.list_name INTEGER The name of the IP list file (“/tmp/scamperctl:” for daemon mode, “default” for CLI).
raw.CycleStop.ID INTEGER N/A
raw.CycleStop.Hostname STRING The hostname of the system that this traceroute was collected on.
raw.CycleStop.stop_time INTEGER When traceroute finished in Unix epoch.

Example queries

The following query provides an overview of metadata for snapshots that have been published:

SELECT *
FROM `mlab-collaboration.sorbonne.iprs_index1`
WHERE is_published = true;

The following query fetches records from the iprs_data1 table, but only for snapshots that meet specific criteria in the iprs_index1 table.

Filtering Criteria:

  • Timeframe: Includes snapshots taken in March 2025.
  • Duration: Includes only snapshots lasting less than 2 hours.

SELECT *
FROM `mlab-collaboration.sorbonne.iprs_data1`
WHERE id IN (
SELECT id
FROM `mlab-collaboration.sorbonne.iprs_index1`
WHERE start_time BETWEEN “2025-03-01” AND “2025-03-30”
AND duration < 7200
);

Back to Top