PcapPlusPlus는 네트워크 패킷을 캡처, 분석 및 생성하기 위한 멀티 플랫폼 C++ 라이브러리입니다. 이 라이브러리는 효율적이고 강력하며 사용이 용이하도록 설계되었습니다.
PcapPlusPlus는 다양한 네트워크 프로토콜을 디코딩하고 생성할 수 있는 기능을 제공하며, libpcap, WinPcap, Npcap, DPDK, eBPF AF_XDP, PF_RING 등과 같은 유용한 패킷 처리 엔진을 위한 손쉬운 C++ 래퍼를 지원합니다.
GitHub 릴리스 페이지에서 다운로드하거나 패키지 관리자를 사용할 수 있으며, 직접 PcapPlusPlus를 빌드할 수도 있습니다. 자세한 내용은 PcapPlusPlus 웹사이트의 다운로드 페이지를 방문하세요.
https://github.com/seladb/PcapPlusPlus/releases/latest
brew install pcapplusplus
Homebrew formulae: https://formulae.brew.sh/formula/pcapplusplus
Windows:
.\vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
Vcpkg 포트: https://github.com/microsoft/vcpkg/tree/master/ports/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 증명을 통해 서명됩니다. 모든 증명은 여기에서 확인할 수 있습니다. GitHub CLI를 통해 이러한 패키지의 증명을 검증할 수 있습니다. 패키지 검증을 위해 다음 명령어를 사용할 수 있습니다:
gh attestation verify <패키지 파일 경로> --repository seladb/PcapPlusPlus
터미널에 다음과 같은 출력이 나타납니다:
✓ Verification succeeded!
- 패킷 캡처: libpcap, WinPcap, Npcap, Intel DPDK, eBPF AF_XDP, ntop의 PF_RING 및 raw 소켓을 위한 손쉬운 C++ 래퍼를 통한 패킷 캡처 [더 알아보기]
- 패킷 분석 및 생성: 다양한 네트워크 프로토콜에 대한 분석, 생성 및 편집을 지원 [더 알아보기]
- 파일로 패킷 읽기 및 쓰기: PCAP 및 PCAPNG 형식의 파일을 지원 [더 알아보기]
- 라인 속도에서의 패킷 처리: DPDK, eBPF AF_XDP, PF_RING을 위한 효율적이고 쉬운 C++ 래퍼 [더 알아보기]
- 멀티 플랫폼 지원: Linux, MacOS, Windows, Android 및 FreeBSD에서 완전 지원
- 패킷 재조합: TCP 재조합 및 IP 단편화와 재조합 [더 알아보기]
- 패킷 필터링: libpcap의 BPF 필터를 더 간편하게 사용 [더 알아보기]
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 추출
pcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address();
pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();
// 소스 및 대상 IP 출력
std::cout << "Source IP is '" << srcIP << "'; Dest IP is '" << destIP << "'" << std::endl;
}
// 파일 닫기
reader.close();
return 0;
}
자세한 내용은 PcapPlusPlus 웹사이트의 시작하기 페이지에서 확인할 수 있습니다. 이 페이지는 애플리케이션을 빠르게 시작할 수 있는 단계별 안내를 제공합니다.
PcapPlusPlus는 다음의 세 가지 라이브러리로 구성됩니다:
- Packet++ - 네트워크 패킷을 파싱하고 생성 및 편집하는 라이브러리
- Pcap++ - 패킷을 캡처하고 전송하며 네트워크 및 NIC 정보, 통계를 제공하는 라이브러리 (libpcap, WinPcap, Npcap, DPDK, PF_RING 등과 같은 패킷 캡처 엔진을 위한 C++ 래퍼)
- Common++ - Packet++ 및 Pcap++에서 사용하는 일반적인 코드 유틸리티를 포함한 라이브러리
PcapPlusPlus 웹사이트의 API 문서 섹션에서 자세한 API 문서를 확인할 수 있습니다.
PcapPlusPlus는 현재 Windows, Linux, MacOS, Android, __FreeBSD__에서 지원됩니다. PcapPlusPlus 웹사이트에서 지원 플랫폼 전체 목록을 확인할 수 있으며, 다운로드 섹션을 참조하여 해당 플랫폼에서 PcapPlusPlus를 시작하세요.
PcapPlusPlus는 현재 다음 프로토콜의 패킷을 파싱, 편집 및 생성할 수 있습니다:
- Ethernet II
- IEEE 802.3 Ethernet
- LLC (BPDU만 지원)
- Null/Loopback
- Packet trailer (패킷 패딩)
- PPPoE
- SLL (Linux cooked capture)
- SLL2 (Linux cooked capture v2)
- STP
- VLAN
- VXLAN
- Wake on LAN (WoL)
- NFLOG (Linux Netfilter NFLOG) - 파싱만 가능 (편집 불가)
- ARP
- GRE
- ICMP
- ICMPv6
- IGMP (IGMPv1, IGMPv2, IGMPv3 지원)
- IPv4
- IPv6
- MPLS
- NDP
- Raw IP (IPv4 & IPv6)
- VRRP (IPv4 & IPv6)
- WireGuard
- COTP
- GTP (v1 & v2)
- IPSec AH & ESP - 파싱만 가능 (편집 불가)
- TCP
- TPKT
- UDP
- SDP
- SIP
- SSL/TLS - 파싱만 가능 (편집 불가)
- ASN.1 인코더 및 디코더
- BGP (v4)
- DHCP
- DHCPv6
- DNS
- FTP
- HTTP 헤더 (요청 및 응답)
- LDAP
- NTP (v3, v4)
- Radius
- S7 Communication (S7comm)
- SMTP
- SOME/IP
- SSH - 파싱만 가능 (편집 불가)
- Telnet - 파싱만 가능 (편집 불가)
- 일반 페이로드
DPDK는 빠른 패킷 처리를 위한 데이터 플레인 라이브러리 세트이며, PF_RING™은 패킷 캡처 속도를 대폭 향상시키는 새로운 유형의 네트워크 소켓입니다. PcapPlusPlus는 DPDK 및 PF_RING에 대한 C++ 추상화 계층을 제공합니다. 자세한 내용은 PcapPlusPlus 웹사이트의 DPDK 및 PF_RING 지원 페이지에서 확인하세요.
PcapPlusPlus는 다른 C++ 라이브러리(libtins
, libcrafter
등)와 성능을 비교하기 위해 Matias Fontanini의 packet-capture-benchmarks 프로젝트를 사용했습니다. 성능 결과는 PcapPlusPlus 웹사이트의 벤치마크 페이지에서 확인할 수 있습니다.
피드백을 환영합니다. 다음 방법을 통해 연락해 주세요:
- GitHub 이슈 작성
- PcapPlusPlus Google 그룹에 메시지 게시: https://groups.google.com/d/forum/pcapplusplus-support
- Stack Overflow에서 질문하기: https://stackoverflow.com/questions/tagged/pcapplusplus
- 이메일 보내기: pcapplusplus@gmail.com
- X 팔로우하기: https://x.com/seladb
이 프로젝트가 마음에 드시면 GitHub에서 Star를 눌러 주세요 ⭐ ⭐
자세한 내용은 PcapPlusPlus 웹사이트를 방문하여 확인할 수 있습니다.
이 프로젝트에 기여해 주신다면 감사하겠습니다. 기여에 관심이 있으시면 PcapPlusPlus 웹사이트의 기여 페이지를 방문해 주세요.
PcapPlusPlus는 Unlicense 라이선스로 제공됩니다.