
クロスプラットフォームのC++ライブラリで、高性能なネットワークパケットキャプチャ、解析、生成、分析を実現します。libpcap、DPDK、AF_XDP、PF_RINGをサポートし、TCP再構成、TLSフィンガープリンティング、プロトコルデコードを含みます。
PcapPlusPlus は、ネットワークパケットのキャプチャ、解析、生成を行うためのマルチプラットフォーム C++ ライブラリです。効率的かつ強力で、使いやすく設計されています。
PcapPlusPlus は、多種多様なネットワークプロトコルのデコードと生成機能を提供します。また、libpcap、WinPcap、Npcap、DPDK、eBPF AF_XDP、WinDivert、PF_RING など、最も人気のあるパケット処理エンジンに対する使いやすい C++ ラッパーも提供します。
GitHub のリリースページからダウンロードするか、パッケージマネージャーを使用するか、PcapPlusPlus を自分でビルドすることができます。詳細については、PcapPlusPlus ウェブサイトの ダウンロード ページをご覧ください。
brew install pcapplusplus
Homebrew formulae: https://formulae.brew.sh/formula/pcapplusplus
Windows:
.\vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
conan install "pcapplusplus/[>0]@" -u
ConanCenter のパッケージ: https://conan.io/center/pcapplusplus
git リポジトリをクローンします:
git clone https://github.com/seladb/PcapPlusPlus.git
PcapPlusPlus ウェブサイトの ソースからビルド ページで、お使いのプラットフォームに応じたビルド手順に従ってください。
v23.09 より新しい PcapPlusPlus のリリースは、GitHub の attestation で署名されています。すべての attestation は こちら で確認できます。GitHub CLI を使ってこれらのパッケージの attestation を検証できます。パッケージを検証するには、gh attestation verify の最新の手順に従ってください。シンプルな手順としては、次のコマンドを使用できます:
gh attestation verify <path-to-package-file> --repository seladb/PcapPlusPlus
ターミナルに次の出力が表示されるはずです:
✓ Verification succeeded!
PcapPlusPlus でアプリケーションを書くことは非常に簡単で直感的です。以下は、PCAP ファイルからパケットを読み込んで解析する方法を示す簡単なアプリケーションです:
#include <iostream>
#include "IPv4Layer.h"
#include "Packet.h"
#include "PcapFileDevice.h"
int main(int argc, char* argv[])
{
// 読み取り用に pcap ファイルを開く
pcpp::PcapFileReaderDevice reader("1_packet.pcap");
if (!reader.open())
{
std::cerr << "pcap ファイルを開く際にエラーが発生しました" << std::endl;
return 1;
}
// ファイルから最初の(かつ唯一の)パケットを読み込む
pcpp::RawPacket rawPacket;
if (!reader.getNextPacket(rawPacket))
{
std::cerr << "ファイル内の最初のパケットを読み込めませんでした" << std::endl;
return 1;
}
// raw パケットを解析済みパケットに変換する
pcpp::Packet parsedPacket(&rawPacket);
// パケットが IPv4 であることを確認する
if (parsedPacket.isPacketOfType(pcpp::IPv4))
{
// 送信元 IP と宛先 IP を抽出する
pcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address();
pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();
// 送信元 IP と宛先 IP を出力する
std::cout << "送信元 IP: '" << srcIP << "'; 宛先 IP: '" << destIP << "'" << std::endl;
}
// ファイルを閉じる
reader.close();
return 0;
}
詳細は PcapPlusPlus ウェブサイトの はじめに ページで確認できます。このページでは、いくつかの簡単なステップを通じて、アプリケーションを起動するまでの流れを案内します。
PcapPlusPlus は 3 つのライブラリで構成されています:
PcapPlusPlus ウェブサイトの API ドキュメントセクション で詳細な API ドキュメントを確認できます。 不足しているデータがあれば、ご連絡ください。
PcapPlusPlus は現在
Windows
PcapPlusPlus は現在、以下のプロトコルのパケットの解析、編集、生成をサポートしています:
The Data Plane Development Kit (DPDK) は、高速パケット処理のためのデータプレーンライブラリとネットワークインターフェースコントローラドライバ群です。
PF_RING™ は、パケットキャプチャ速度を劇的に向上させる新しいタイプのネットワークソケットです。
どちらのフレームワークも非常に高速なパケット処理 (ラインスピードまで) を提供し、ルーター、ファイアウォール、ロードバランサーなど多くのネットワークアプリケーションで使用されています。 PcapPlusPlus は DPDK と PF_RING の上に C++ の抽象化レイヤーを提供します。この抽象化レイヤーは、これらのフレームワークを利用する際に発生する多くのボイラープレートを取り除き、使いやすいインターフェースを提供します。詳細は、PcapPlusPlus ウェブサイトの DPDK と PF_RING のサポートページで確認できます。
PcapPlusPlus と他の類似 C++ ライブラリ (libtins や libcrafter など) のパフォーマンスを比較するために、Matias Fontanini 氏の packet-capture-benchmarks プロジェクトを使用しました。
結果は PcapPlusPlus ウェブサイトの ベンチマーク ページで確認できます。
フィードバックを大歓迎いたします。以下のいずれかの方法でお気軽にご連絡ください:
このプロジェクトを気に入っていただけたら、GitHub でスターをお願いします — 大きな助けになります! ⭐ ⭐
詳細は PcapPlusPlus ウェブサイト をご覧ください。
このプロジェクトへの貢献を心より歓迎します。貢献にご興味があれば、PcapPlusPlus ウェブサイトの コントリビューションページ をご覧ください。
PcapPlusPlus は Unlicense ライセンス の下で公開されています。