MyNixOS website logo
Description

A Multipath TCP analyzer.

mptcpanalyzer is a multipath TCP (www.multipath-tcp.org) protocol analyzer. Multipath TCP is an extension of the Transmission Control Protocol that allows applications to send one single stream of data over multiple TCP connections.

This software can automatically plot MPTCP characteristics such as Data Sequence Numbers, Data Acknowledgements etc. It can also map one packet capture to another to give more detailed statistics such as One-Way delays and reinjection qualifications.

  • list the MPTCP connections in the pcap

  • display chosen statistics on a specific MPTCP connection (list of subflows, number of reinjections, etc)

  • convert packet capture files (*.pcap) to *.csv files

  • plot data sequence numbers, dataacks for all subflows

  • can map packets between the client and server pcaps to plot one-way delays

Presentation

Mptcpanalyzer is a tool conceived to help with MPTCP pcap analysis (as mptcptrace for instance).

It accepts packet capture files (*.pcap) as inputs and from there you can:

  • list MPTCP connections
  • compute statistics on a specific MPTCP connection (list of subflows, reinjections, subflow actual contributions...)
  • export a CSV file with MPTCP fields
  • plot one way delays
  • ...

Commands are self documented with autocompletion. The interpreter with autocompletion that can generate & display plots such as the following:

cabal configure --enable-profiling
cabal run mptcpanalyzer "load-pcap examples/client_2_filtered.pcapng"  -- +RTS
-xc

Installation

You will need a wireshark version >= 3.6.0 .

Until changes are upstreamed, you will need this fork of optparse-applicative

  • https://github.com/teto/optparse-applicative/tree/quantum-wip-16.1 to get autocompletion working

How to use

mptcpanalyzer can run into 2 modes:

  1. interactive mode (default): an interpreter with some basic completion will accept your commands. There is also interactive help.
  2. otherwise, it will consider the unknow arguments as one command, the same that could be used interactively

For example, we can load mptcp pcaps (available at wireshark wiki or in this folder).

mptcpanalyzer "map-tcp examples/client_2_filtered.pcapng examples/server_2_filtered.pcapng 0"
mptcpanalyzer "load-pcap examples/client_2_filtered.pcapng"

or for a live analysis:

plot-mptcp-live 10.0.0.1 10.0.0.2 33784 5201 client lo -f examples/client_2_cleaned_start.pcapng

See this blog for more tutorials about mptcpanalyzer.

NB: in a local repository, you can run the previous command prefixed with mptcpanalyzer$ cabal run -- COMMAND.

How to develop/contribute

See CONTRIBUTING.

Dependencies

Roadmap

  • improve caching
  • improve autocompletion
  • live statistics/plotting
  • plugins ?
  • ability to leverage the API in ihaskell ?

Related tools

Similar software:

ToolDescription
mptcptraceC based: an example
mptcpplotC based developed at NASA: generated output example

Acknowledgements

This project is founded by .

wireshark-mptcp: https://www.wireshark.org/docs/dfref/m/mptcp.html polysemy: https://hackage.haskell.org/package/polysemy diagrams: https://hackage.haskell.org/package/diagrams frames: https://hackage.haskell.org/package/Frames shelltestrunner: https://github.com/simonmichael/shelltestrunner.

Metadata

Version

0.0.2.0

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows