{ "info": { "author": "Matthieu Coudron", "author_email": "coudron@iij.ad.jp", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "Intended Audience :: Telecommunications Industry", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python :: 3.7" ], "description": "\n\n| | |\n| --- | --- |\n| Documentation (latest) | [![Dev doc](https://readthedocs.org/projects/pip/badge/?version=latest)](http://mptcpanalyzer.readthedocs.io/en/latest/) |\n| Documentation (stable) | [![Master doc](https://readthedocs.org/projects/pip/badge/?version=stable)](http://mptcpanalyzer.readthedocs.io/en/stable/) |\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 |\u00a0[![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\n* [Presentation](#presentation)\n* [Installation](#installation)\n* [Help](#faq)\n* [Related tools](#related_tools)\n\n\n\nPresentation\n===\n\nMptcpanalyzer is a python tool conceived to help with MPTCP pcap analysis (as [mptcptrace] for instance).\n\nIt accepts as input a capture file (.pcap or .pcapng) and from there generates a CSV file\n(thanks to tshark, the terminal version of wireshark) with the MPTCP fields\nrequired for analysis.\nFrom there you can:\n\n- list MPTCP connections\n- compute statistics on a specific MPTCP connection (list of subflows, reinjections, subflow actual contributions...)\nIt accepts as input a capture file (\\*.pcap) and depending on from there can :\n- export a CSV file with MPTCP fields\n- plot one way delays\n- ...\n\nMost commands are self documented and/or with autocompletion.\n\nThen you have an interpreter with autocompletion that can generate & display plots such as the following:\n\n![Data Sequence Number (DSN) per subflow plot](examples/dsn.png)\n\n\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\n# Table of Contents\n\n# Installation\n\nYou will need a wireshark version __>= 3.0.0__\n\nOnce wireshark is installed you can install mptcpanalyzer via pip:\n`$ python3 -mpip install mptcpanalyzer --user`\n\npython __3.7__ is mandatory since we rely on its type hinting features.\nDependancies are (some will be made optional in the future):\n\n- [stevedore](http://docs.openstack.org/developer/stevedore/) to manage plugins\n- the data analysis library [pandas](http://pandas.pydata.org/)\n- lnumexpr to run specific queries in pandas\n- [matplotlib](http://matplotlib) to plot graphs\n- [cmd2](https://github.com/python-cmd2/cmd2) to generate the command line\n\nRun the `checkhealth` command in case of problems.\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 an mptcp pcap (I made one available on [wireshark wiki](https://wiki.wireshark.org/SampleCaptures#MPTCP) or in this repository, in the _examples_ folder).\n\nRun `$ mptcpanalyzer --load examples/iperf-mptcp-0-0.pcap`. The script will try to generate\na csv file, it can take a few minutes 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\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> load_pcap examples/server_2_filtered.pcapng\n> mptcp_summary 0\n```\n\n\nMap tcp.stream between server and client pcaps:\n\n```\n>map_tcp_connection examples/client_1_tcp_only.pcap examples/server_1_tcp_only.pcap 0\nTODO\n>print_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> map_mptcp_connection examples/client_2_filtered.pcapng examples/client_2_filtered.pcapng 0\n2 mapping(s) found\n0 <-> 0.0 with score=inf <-- should be a correct match\n-tcp.stream 0: 10.0.0.1:33782 <-> 10.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 0: 10.0.0.1:33782 <-> 10.0.0.2:05201 (mptcpdest: Server) with score=inf\n-tcp.stream 2: 10.0.0.1:54595 <-> 11.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 2: 10.0.0.1:54595 <-> 11.0.0.2:05201 (mptcpdest: Server) with score=inf\n-tcp.stream 4: 11.0.0.1:59555 <-> 11.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 4: 11.0.0.1:59555 <-> 11.0.0.2:05201 (mptcpdest: Server) with score=inf\n-tcp.stream 6: 11.0.0.1:35589 <-> 10.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 6: 11.0.0.1:35589 <-> 10.0.0.2:05201 (mptcpdest: Server) with score=inf\n0 <-> 1.0 with score=0\n-tcp.stream 0: 10.0.0.1:33782 <-> 10.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 1: 10.0.0.1:33784 <-> 10.0.0.2:05201 (mptcpdest: Server) with score=30\n-tcp.stream 2: 10.0.0.1:54595 <-> 11.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 3: 10.0.0.1:57491 <-> 11.0.0.2:05201 (mptcpdest: Server) with score=30\n-tcp.stream 4: 11.0.0.1:59555 <-> 11.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 5: 11.0.0.1:50077 <-> 11.0.0.2:05201 (mptcpdest: Server) with score=30\n-tcp.stream 6: 11.0.0.1:35589 <-> 10.0.0.2:05201 (mptcpdest: Server) mapped to tcp.stream 7: 11.0.0.1:50007 <-> 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# 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\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/teto/mptcpanalyzer", "keywords": "mptcp analysis pcap", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "mptcpanalyzer", "package_url": "https://pypi.org/project/mptcpanalyzer/", "platform": "", "project_url": "https://pypi.org/project/mptcpanalyzer/", "project_urls": { "Homepage": "http://github.com/teto/mptcpanalyzer" }, "release_url": "https://pypi.org/project/mptcpanalyzer/0.3.2/", "requires_dist": [ "stevedore", "matplotlib (>=3.0.3)", "pandas (>=0.25)", "cmd2 (>=0.9.15)" ], "requires_python": "", "summary": "Analyze mptcp traces (.pcap)", "version": "0.3.2" }, "last_serial": 5652153, "releases": { "0.1": [], "0.1.dev0": [ { "comment_text": "", "digests": { "md5": "f311154c5afa4462aef9ef8e31b17e67", "sha256": "e69bb35119803b1adae87e09351d590f1340c63692741170497240f1c83d1e37" }, "downloads": -1, "filename": "mptcpanalyzer-0.1.dev0.tar.gz", "has_sig": false, "md5_digest": "f311154c5afa4462aef9ef8e31b17e67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34892, "upload_time": "2016-07-22T14:50:33", "url": "https://files.pythonhosted.org/packages/51/22/8c324bf95c285958e75a497ebf0994a2112fb4386c1bd5c9a157722315c8/mptcpanalyzer-0.1.dev0.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "b04805550b438c1206d8081e3cb6de78", "sha256": "c24470621bc97a39c2be2d3ce7b610c66166b13556dee98d5af5d073adab2387" }, "downloads": -1, "filename": "mptcpanalyzer-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b04805550b438c1206d8081e3cb6de78", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 85027, "upload_time": "2018-11-16T11:38:39", "url": "https://files.pythonhosted.org/packages/ff/03/bab8b1a83b1ee4e64ff3c5c9135021c174b0df5775fdae335f04eb74e80b/mptcpanalyzer-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77dd7fd6b56346de3e789ae23111d211", "sha256": "1cb33bb482ab3274a1dedf5481db5f1d3bcdf4c34a27d90cbece4223fed45bcc" }, "downloads": -1, "filename": "mptcpanalyzer-0.2.tar.gz", "has_sig": false, "md5_digest": "77dd7fd6b56346de3e789ae23111d211", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36427796, "upload_time": "2018-11-16T10:43:32", "url": "https://files.pythonhosted.org/packages/fe/11/6b181af9f4e8b0d83a8071fc1f814765c2b1b407dc39c4be197facf4b12e/mptcpanalyzer-0.2.tar.gz" } ], "0.2.dev0": [ { "comment_text": "", "digests": { "md5": "cf03568bc60a009cc7cb4e2d60c5a5ec", "sha256": "9377ec7bba4e73af191b9b324d730cf8d3f46f3946bca60563500d7545410168" }, "downloads": -1, "filename": "mptcpanalyzer-0.2.dev0.tar.gz", "has_sig": false, "md5_digest": "cf03568bc60a009cc7cb4e2d60c5a5ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35307, "upload_time": "2016-07-22T15:03:54", "url": "https://files.pythonhosted.org/packages/f8/98/6bdf886c5fcec1c05237dbfec1017881d40429ab7cd2c16e35b521ce53be/mptcpanalyzer-0.2.dev0.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "45bfbf6fea4160743de7f8b366aa72f2", "sha256": "774ea8f1a99a6a0baaab5655870de8b4bc616dbf0b4d5cde6e567c081cf0bd4f" }, "downloads": -1, "filename": "mptcpanalyzer-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "45bfbf6fea4160743de7f8b366aa72f2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 85030, "upload_time": "2018-11-29T01:30:22", "url": "https://files.pythonhosted.org/packages/45/a0/0e0ce4722c69ac6831ad7b699a591e99f4f8b7679c3cf9817c27aa67c96f/mptcpanalyzer-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34311bb83270f4904546a1f3ae2df654", "sha256": "36206c467dbc3d57f399e1571a78c04fd69d2a8e8f5715e270288836fb938b7a" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.tar.gz", "has_sig": false, "md5_digest": "34311bb83270f4904546a1f3ae2df654", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36427757, "upload_time": "2018-11-29T01:32:13", "url": "https://files.pythonhosted.org/packages/94/05/ae418780239202450bec21e5a4a05fad3c9a9a18d3f30240ce4966aa75dc/mptcpanalyzer-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "041e9c10f320fe4027eea1b21457f590", "sha256": "3f2153a3e70f716d06ce62878baa965d66678ac5b30bb8b8e1e0f352d29bc3da" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "041e9c10f320fe4027eea1b21457f590", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 92627, "upload_time": "2019-04-26T07:43:37", "url": "https://files.pythonhosted.org/packages/59/b3/f37205d3e52a45f7cf6b5d66fafe026b4fb2ec3ba06710a4c05ca69ce88c/mptcpanalyzer-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ceffa5fb64306002891915a1f68f1758", "sha256": "fe2a7277600a2c51f3c716defa66b1315e9f868818cb9e6581cc2144e3a76dbf" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ceffa5fb64306002891915a1f68f1758", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36433422, "upload_time": "2019-04-26T07:43:55", "url": "https://files.pythonhosted.org/packages/98/0b/80818a6e2e66f537c229c44fd2e73eeee11ff837c1afae6108000e6c45f4/mptcpanalyzer-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "6f6cb678e298977ef244ac6d7dac4b75", "sha256": "4c76789149eed8143aa612f94bf5b1971fb6c91df103ac877dfc9ff786d7c8c2" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6f6cb678e298977ef244ac6d7dac4b75", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 95091, "upload_time": "2019-08-08T20:46:14", "url": "https://files.pythonhosted.org/packages/bb/95/8a0b874d907c7f36d1f0abb0f7b1b1268b833dd6e515413ac08a08a0faf9/mptcpanalyzer-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "60a9ae45a013b18a987e04b6bcded9be", "sha256": "2b6bc46dd4dca14bee1014260169c171b09c4c83f8a9d58df56e759631bba579" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.2.tar.gz", "has_sig": false, "md5_digest": "60a9ae45a013b18a987e04b6bcded9be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36437597, "upload_time": "2019-08-08T20:46:29", "url": "https://files.pythonhosted.org/packages/ae/3b/579fba36ac4bd16751e0c67698ac419c39173bb05d5b5c73d3eadbc8f4a0/mptcpanalyzer-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6f6cb678e298977ef244ac6d7dac4b75", "sha256": "4c76789149eed8143aa612f94bf5b1971fb6c91df103ac877dfc9ff786d7c8c2" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6f6cb678e298977ef244ac6d7dac4b75", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 95091, "upload_time": "2019-08-08T20:46:14", "url": "https://files.pythonhosted.org/packages/bb/95/8a0b874d907c7f36d1f0abb0f7b1b1268b833dd6e515413ac08a08a0faf9/mptcpanalyzer-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "60a9ae45a013b18a987e04b6bcded9be", "sha256": "2b6bc46dd4dca14bee1014260169c171b09c4c83f8a9d58df56e759631bba579" }, "downloads": -1, "filename": "mptcpanalyzer-0.3.2.tar.gz", "has_sig": false, "md5_digest": "60a9ae45a013b18a987e04b6bcded9be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36437597, "upload_time": "2019-08-08T20:46:29", "url": "https://files.pythonhosted.org/packages/ae/3b/579fba36ac4bd16751e0c67698ac419c39173bb05d5b5c73d3eadbc8f4a0/mptcpanalyzer-0.3.2.tar.gz" } ] }