{"id":19561412,"url":"https://github.com/m-mizutani/packetmachine","last_synced_at":"2025-04-27T00:31:17.177Z","repository":{"id":142409146,"uuid":"66632359","full_name":"m-mizutani/packetmachine","owner":"m-mizutani","description":"Fast network packet decoding library in C++","archived":false,"fork":false,"pushed_at":"2018-02-10T02:08:10.000Z","size":6704,"stargazers_count":27,"open_issues_count":1,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-26T07:08:35.663Z","etag":null,"topics":["c-plus-plus","cpp-library","network-analysis","packet-analyzer","packet-capture"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m-mizutani.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2016-08-26T08:49:53.000Z","updated_at":"2024-08-12T19:24:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"ba2d5cae-a497-40f9-8465-d5e720fd245d","html_url":"https://github.com/m-mizutani/packetmachine","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-mizutani%2Fpacketmachine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-mizutani%2Fpacketmachine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-mizutani%2Fpacketmachine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m-mizutani%2Fpacketmachine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m-mizutani","download_url":"https://codeload.github.com/m-mizutani/packetmachine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251072279,"owners_count":21532004,"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","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":["c-plus-plus","cpp-library","network-analysis","packet-analyzer","packet-capture"],"created_at":"2024-11-11T05:11:22.637Z","updated_at":"2025-04-27T00:31:17.171Z","avatar_url":"https://github.com/m-mizutani.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"PacketMachine\n=====================\n\nA high-performance and simplified network traffic decoding library in C++.\n\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cpacketmachine.hpp\u003e\n\nint main(int argc, char* argv[]) {\n  pm::Machine m;\n\n  m.on(\"TCP\", [](const pm::Property\u0026 p) {\n      std::cout \u003c\u003c \"TCP: \" \u003c\u003c\n          p[\"IPv4.src\"] \u003c\u003c \":\" \u003c\u003c p[\"TCP.src_port\"] \u003c\u003c \" \u003e \" \u003c\u003c\n          p[\"IPv4.dst\"] \u003c\u003c \":\" \u003c\u003c p[\"TCP.dst_port\"] \u003c\u003c std::endl;\n    });\n\n  m.add_pcapdev(\"eth0\");\n  m.loop();\n}\n```\n\n**PacketMachine is ...**\n\n- High performance packet decoding library\n- Able to capture network traffic via existing mechanism (e.g. libpcap)\n\n**PacketMachine is not ...**\n\n- Packet capturing mechanism for higher performance than netmap, DPDK, etc.\n- Packet crafting library.\n\nFeatures\n------------\n\n* Event callback model for network traffic decoding.\n* Easy access to parameter of network traffic packet, such as `p[\"IPv4.src\"]`\n* Multi-threading (read/capture thread + decoding thread)\n\nPerformance\n------------\n\n![benchmark-task1](./docs/images/benchmark_task1.png)\n\nPacket processing performance depends on kinds of task and data set. The chart shows a result of benchmark with simple packet counting task and 3 data set. In the task, PacketMachine marked over 2,000,000 pps (Packet Per Second). This is about three times faster than [libtins](https://github.com/mfontanini/libtins) that is a C++ library for packet decoding and crafting.\n\nSee a [benchmark](docs/benchmark.md) document for more detail.\n\nHow to use\n------------\n\n### Install\n\nNote: Install libpcap before setup of PacketMachine.\n\n```sh\n$ git clone --recurse-submodules  https://github.com/m-mizutani/packetmachine.git\n$ cd packetmachine\n$ cmake . \u0026\u0026 make\n$ sudo make install\n```\n\nSee [install.md](docs/install.md) for more details.\n\n### Compile\n\nPrepare `example.cc` as below:\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cpacketmachine.hpp\u003e\n\nint main(int argc, char* argv[]) {\n  pm::Machine m;\n\n  m.on(\"UDP\", [](const pm::Property\u0026 p) {\n      std::cout \u003c\u003c \"UDP: \" \u003c\u003c\n          p[\"IPv4.src\"] \u003c\u003c \":\" \u003c\u003c p[\"UDP.src_port\"] \u003c\u003c \" \u003e \" \u003c\u003c\n          p[\"IPv4.dst\"] \u003c\u003c \":\" \u003c\u003c p[\"UDP.dst_port\"] \u003c\u003c std::endl;\n    });\n\n  m.add_pcapdev(argv[1]);\n  m.loop();\n\n  return 0;\n}\n```\n\nCompile `example.cc` and run it.\n\n```sh\n$ clang++ -std=c++11 example.cc -o example -lpacketmachine\n$ sudo ./example eth0\nUDP: 199.59.148.241:443 \u003e 172.20.10.2:53227\nUDP: 172.20.10.2:53227 \u003e 199.59.148.241:443\n...\n```\n\nDocuments\n------------\n\n- [Installation guide](docs/install.md)\n- [Tutorial](docs/tutorial.md)\n- References\n    - [Parameter List](docs/parameters.md)\n    - [Event List](docs/events.md)\n    - [Config List](docs/configs.md)\n\n\t\nLicense\n------------\n\n- main part: [2-clause BSD license](LICENSE.md)\n- `test/gtest*`: from **Google Test**, Google Inc. The BSD 3-Clause License\n- `src/utils/hash.cc`: from **Chromium**, Google Inc. The BSD 3-Clause License\n\nAuthor\n------------\n\n- Masayoshi Mizutani \u003cmizutani@sfc.wide.ad.jp\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-mizutani%2Fpacketmachine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm-mizutani%2Fpacketmachine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-mizutani%2Fpacketmachine/lists"}