
Python 3で開発されたネットワークパケットスニッフィングツール。
GNU/Linux 向けネットワークトラフィックモニターです。フレームは raw ソケットでネットワークインターフェースからキャプチャされ、NETProtocols ライブラリでレイヤーごとにデコードされて、到着すると画面に表示されます:
[>] Frame #4 at 15:42:07 (wlan0, 74 bytes)
[+] Ethernet 3c:7c:3f:1a:be:22 -> 9c:1e:95:aa:01:5f
EtherType: IPv4
[+] IPv4 192.168.1.96 -> 142.250.79.78
TTL: 64 | Flags: Don't fragment (DF) | Total Length: 60 | ID: 39754
Protocol: TCP | Checksum: 0x2b51
[+] TCP 51888 -> 443
Flags: 0x002 (SYN) | Seq: 3598801521 | Ack: 0
Window: 64240 | Checksum: 0x2008 | Options: 20 bytes
デコードはオプションを認識します(IPv4 IHL と TCP データオフセットが尊重されます)。不正または切り詰められたフレームはキャプチャをクラッシュさせることなく診断され、未知のプロトコルはデコードチェーンを正常に終了します。ネットワークが何を送り込んでもキャプチャは生き延びます。
pipx install "git+https://github.com/EONRaider/Packet-Sniffer.git"
(または同じ URL で uv tool install。このアプリケーションはこの名前では PyPI に公開されておらず、そのデビューは近日予定されている改名のために取ってあります。)
または uv を使ってクローンから実行:
git clone https://github.com/EONRaider/Packet-Sniffer.git
cd Packet-Sniffer
uv sync
packet-sniffer [-h] [-i INTERFACE] [-d] [--version]
options:
-i, --interface interface to capture frames from (default: all interfaces)
-d, --data also display each frame's raw payload
キャプチャには raw ソケットが必要で、Linux では root 権限か:
sudo packet-sniffer -i eth0
...またはインタープリターに CAP_NET_RAW ケーパビリティを付与する必要があります。クローンから実行する場合は、sudo .venv/bin/python -m packet_sniffer とします。
capture.py は AF_PACKET ソケットから raw フレームを生成します。decoder.py は各フレームのプロトコルチェーン(Ethernet → ARP / IPv4 / IPv6 → ICMP / TCP / UDP)を不変の DecodedFrame に変換します。output.py のレンダラーはデコードされたレイヤータイプに基づいてディスパッチします。長いキャプチャ中もメモリがフラットに保たれる理由やレンダラーの追加方法を含む完全なツアーは ARCHITECTURE.md にあります。
raw ソケット以外はすべて任意の OS で動作するため、テストスイート(記録されたフレームに対するデコードとレンダリング)は root も Linux も必要としません:
uv run pytest
SO_TIMESTAMPNS)このリポジトリに含まれるコードを、その一部または全部を問わず、事前の相互同意なしにターゲットに対して使用することは違法です。適用されるすべての地域、州、連邦の法律を遵守する責任はエンドユーザーにあります。
開発者はいかなる責任も負わず、このリポジトリに含まれるコードが、偶然またはその他の方法で、脅威エージェントや不正なエンティティによって、システムおよびその関連リソースのセキュリティ、プライバシー、機密性、完全性、および/または可用性を侵害する手段として利用された場合に生じる誤用や損害について責任を負いません。この文脈において「侵害(compromise)」とは、前述のシステムに存在する既知または未知の脆弱性の活用を意味するものとします。これには、セキュリティコントロールの実装、人為的または電子的に有効化されたものを含みますが、これらに限定されません。
このコードの使用は、宣言された目的がシステムの脆弱性の発見と緩和、およびそれぞれの脅威モデルで定義された悪意のあるエージェントによって用いられる侵害や悪用への曝露の制限である教育環境または許可された侵入テスト業務に直接関連する状況においてのみ、開発者によって承認されます。