{"id":16335022,"url":"https://github.com/teto/pymptcpanalyzer","last_synced_at":"2025-09-17T20:32:28.669Z","repository":{"id":45168458,"uuid":"41598233","full_name":"teto/pymptcpanalyzer","owner":"teto","description":"Tool to help analyze mptcp pcaps","archived":false,"fork":false,"pushed_at":"2023-10-08T19:13:31.000Z","size":22838,"stargazers_count":21,"open_issues_count":18,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-03T15:04:17.424Z","etag":null,"topics":["mptcp","owd","pcap","plot","reinjection","wireshark"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teto.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-29T15:41:20.000Z","updated_at":"2024-08-12T19:19:02.000Z","dependencies_parsed_at":"2024-10-28T09:09:41.951Z","dependency_job_id":"3673fdac-64bb-4737-bae3-03e56729cdb8","html_url":"https://github.com/teto/pymptcpanalyzer","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/teto/pymptcpanalyzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teto%2Fpymptcpanalyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teto%2Fpymptcpanalyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teto%2Fpymptcpanalyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teto%2Fpymptcpanalyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teto","download_url":"https://codeload.github.com/teto/pymptcpanalyzer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teto%2Fpymptcpanalyzer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275658730,"owners_count":25504778,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-17T02:00:09.119Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mptcp","owd","pcap","plot","reinjection","wireshark"],"created_at":"2024-10-10T23:39:52.136Z","updated_at":"2025-09-17T20:32:26.252Z","avatar_url":"https://github.com/teto.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n|  |  |\n| --- | --- |\n| Documentation (latest) | [![Dev doc](https://readthedocs.org/projects/pip/badge/?version=latest)](http://mptcpanalyzer.readthedocs.io/en/latest/) |\n| License | ![License](https://img.shields.io/badge/license-GPL-brightgreen.svg) |\n| Build Status | [![Build status](https://travis-ci.org/teto/mptcpanalyzer.svg?branch=master)](https://travis-ci.org/teto/mptcpanalyzer) |\n| PyPI |[![PyPI package](https://img.shields.io/pypi/dm/mptcpanalyzer.svg)](https://pypi.python.org/pypi/mptcpanalyzer/) |\n| DOI | [![DOI](https://zenodo.org/badge/21021/lip6-mptcp/mptcpanalyzer.svg)](https://zenodo.org/badge/latestdoi/21021/lip6-mptcp/mptcpanalyzer)|\n[![built with nix](https://builtwithnix.org/badge.svg)](https://builtwithnix.org)\n\n\n\n\u003c!-- BEGIN-MARKDOWN-TOC --\u003e\n* [Presentation](#presentation)\n* [Installation](#installation)\n* [Help](#faq)\n* [Related tools](#related_tools)\n\n\u003c!-- END-MARKDOWN-TOC --\u003e\n\nPresentation\n===\n\nMptcpanalyzer is a python tool conceived to help with MPTCP pcap analysis (as [mptcptrace] for instance).\n\nIt accepts packet capture files (\\*.pcap) as inputs and from there you can:\n\n- list MPTCP connections\n- compute statistics on a specific MPTCP connection (list of subflows, reinjections, subflow actual contributions...)\n- export a CSV file with MPTCP fields\n- plot one way delays\n- ...\n\nCommands are self documented with autocompletion.\nThe interpreter with autocompletion that can generate \u0026 display plots such as the following:\n\n![Data Sequence Number (DSN) per subflow plot](examples/dsn.png)\n\n\n# Table of Contents\n\n# Installation\n\nYou will need a wireshark version __\u003e= 3.0.0__ and python \u003e= 3.7\n\nOnce wireshark is installed you can install mptcpanalyzer via pip:\n`$ python3 -mpip install mptcpanalyzer --user`\nor try the development version by:\n```\n$ git clone https://github.com/teto/mptcpanalyzer.git \u0026\u0026 cd mptcpanalyzer\n$ poetry install    # (or \"python3 setup.py develop\" if you use pip)\n```\n\n# or if you use nix\n\n```\n$ nix develop\n$ export PYTHONPATH=\"$PWD:$PYTHONPATH\"\n```\n\n# How to use ?\n\n mptcpanalyzer can run into 3 modes:\n  1. interactive mode (default): an interpreter with some basic completion will accept your commands. There is also some help embedded.\n  2. if a filename is passed as argument, it will load commands from this file\n  3. otherwise, it will consider the unknow arguments as one command, the same that could be used interactively\n\nFor example, we can load mptcp pcaps (available at [wireshark wiki](https://wiki.wireshark.org/SampleCaptures#MPTCP) or in this repository `examples` folder).\n\nRun  `$ mptcpanalyzer --load examples/iperf-mptcp-0-0.pcap`. The script will try to generate\na csv file, it can take several seconds depending on the computer/pcap until the prompt shows up.\nType `?` to list available commands (and their aliases). You have for instance:\n- `lc` (list connections)\n- `ls` (list subflows)\n- `plot`\n- ...\n\n`help ls` will return the syntax of the command, i.e. `ls [mptcp.stream]` where mptcp.stream is one of the number appearing\nin `lc` output.\n\nLook at [Examples](#Examples)\n\n# Examples\n\nHead to the [Wiki](https://github.com/teto/mptcpanalyzer/wiki/Examples) for more examples.\n\nPlot One Way Delays from a connection:\n`plot owd tcp examples/client_2_filtered.pcapng 0 examples/server_2_filtered.pcapng 0 --display`\n\nPlot tcp sequence numbers in both directions:\n`plot tcp_attr -h`\n\nGet a summary of an mptcp connection\n```\n\u003e load_pcap examples/server_2_filtered.pcapng\n\u003e mptcp_summary 0\n```\n\n\nMap tcp.stream between server and client pcaps:\n\n```\n\u003emap_tcp_connection examples/client_1_tcp_only.pcap examples/server_1_tcp_only.pcap  0\nTODO\n\u003eprint_owds examples/client_1_tcp_only.pcap examples/server_1_tcp_only.pcap 0 0\n```\n\nMap tcp.stream between server and client pcaps:\n```\n\u003e map_mptcp_connection examples/client_2_filtered.pcapng examples/client_2_filtered.pcapng 0\n2 mapping(s) found\n0 \u003c-\u003e 0.0 with score=inf  \u003c-- should be a correct match\n-tcp.stream 0: 10.0.0.1:33782  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 0: 10.0.0.1:33782  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) with score=inf\n-tcp.stream 2: 10.0.0.1:54595  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 2: 10.0.0.1:54595  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) with score=inf\n-tcp.stream 4: 11.0.0.1:59555  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 4: 11.0.0.1:59555  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) with score=inf\n-tcp.stream 6: 11.0.0.1:35589  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 6: 11.0.0.1:35589  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) with score=inf\n0 \u003c-\u003e 1.0 with score=0\n-tcp.stream 0: 10.0.0.1:33782  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 1: 10.0.0.1:33784  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) with score=30\n-tcp.stream 2: 10.0.0.1:54595  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 3: 10.0.0.1:57491  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) with score=30\n-tcp.stream 4: 11.0.0.1:59555  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 5: 11.0.0.1:50077  \u003c-\u003e 11.0.0.2:05201  (mptcpdest: Server) with score=30\n-tcp.stream 6: 11.0.0.1:35589  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) mapped to tcp.stream 7: 11.0.0.1:50007  \u003c-\u003e 10.0.0.2:05201  (mptcpdest: Server) with score=30\n```\n\n# FAQ\n\nMoved to the [Wiki](https://github.com/teto/mptcpanalyzer/wiki/FAQ)\n\n# How to contribute\n\nPRs welcome !\nSee the [doc](http://mptcpanalyzer.readthedocs.io/en/latest/contributing.html).\n\n\n# Reference\n\nIf you plan to use this tool in a publication,\nYou can reference mptcpanalyzer via the following Digital Object Identifier:\n[![DOI](https://zenodo.org/badge/21021/lip6-mptcp/mptcpanalyzer.svg)](https://zenodo.org/badge/latestdoi/21021/lip6-mptcp/mptcpanalyzer)\n\nor cite:\n```\n@inproceedings{Coudron:2019:PAM:3340422.3343638,\n author = {Coudron, Matthieu},\n title = {Passive Analysis for Multipath TCP},\n booktitle = {Proceedings of the Asian Internet Engineering Conference},\n series = {AINTEC '19},\n year = {2019},\n isbn = {978-1-4503-6849-0},\n location = {Phuket, Thailand},\n pages = {25--32},\n numpages = {8},\n url = {http://doi.acm.org/10.1145/3340422.3343638},\n doi = {10.1145/3340422.3343638},\n acmid = {3343638},\n publisher = {ACM},\n address = {New York, NY, USA},\n keywords = {Multipath TCP, passive analysis, reinjection},\n}\n```\n\n\n# Related tools\n\nSimilar software:\n\n| Tool             | Description                                                                       |\n|------------------------|-------------------------------------------------------------------------------|\n| [mptcptrace]             | C based: [an example](http://blog.multipath-tcp.org/blog/html/2015/02/02/mptcptrace_demo.html)                                               |\n| [mptcpplot]       | C based developed at NASA: [generated output example](https://roland.grc.nasa.gov/~jishac/mptcpplot/)                                                 |\n\n[mptcptrace]: https://bitbucket.org/bhesmans/mptcptrace\n[mptcpplot]: https://github.com/nasa/multipath-tcp-tools/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteto%2Fpymptcpanalyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteto%2Fpymptcpanalyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteto%2Fpymptcpanalyzer/lists"}