# PCAP Viewer

> .pcap / .pcapng をブラウザだけで解析。パケット一覧、プロトコル解析ツリー、16 進ハイライト。キャプチャは一切アップロードしません。

- URL: https://bytescope.dev/ja/pcap-viewer/
- Locale: ja · Also: [en](https://bytescope.dev/en/pcap-viewer.md) · [zh-Hant](https://bytescope.dev/zh-Hant/pcap-viewer.md)
- Runs: ファイルはブラウザから送信されません — 処理はすべてローカルで行われます。
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

`.pcap` または `.pcapng` をドロップすると、解析に必要な 3 つのペインがそのまま出ます。No. / Time / Source / Destination / Protocol / Length / Info を並べた仮想スクロールのパケット一覧、選択したフレームの解析ツリー、そして双方向に連動する 16 進 / ASCII ペインです。ツリーのフィールドを押せば該当バイトだけが光り、16 進のバイトを押せばそれを含む最も内側のフィールドが開いて選択されます。TCP のフラグや IP のフラグメントビットのようにバイトの内側にある値は、収まっているバイトを光らせたうえでビット位置まで描きます。バイト単位の表示だけでは答えになっていないからです。

アップロードしないことは、このツールの付加機能ではなく前提です。キャプチャファイルは、それを取得したネットワークの地図そのものです——内部アドレス、DNS クエリや TLS SNI に出るホスト名、証明書のサブジェクト、User-Agent、平文プロトコルなら認証情報まで含みます。他のウェブ版ビューアはそれを他人のサーバーに送れと言ってきます。ここではタブがファイルを読み、Web Worker に渡し、メモリ上で解析します。アップロード先そのものが存在しないので、DevTools を開いたまま試せば、キャプチャを開いても通信が 1 本も出ないことを確認できます。

コンテナ層は、従来の libpcap を 4 種類のマジックすべて（リトル / ビッグエンディアン × マイクロ秒 / ナノ秒）で読み、pcapng は複数インタフェース、EPB / SPB、コメント、名前解決ブロックまで扱います。サマリーカードには形式、バイト順、バージョン、各インタフェースのリンク種別とスナップ長、パケット数、キャプチャの時間範囲、そしてコンテナが出した警告をフレーム番号つきで並べます。途中で切れたファイルや壊れたファイルでも致命傷にはしません。読めたところまでを表示し、壊れた箇所は警告として報告します。

解析はリンク層で Ethernet、802.1Q / QinQ VLAN、Linux SLL / SLL2、raw IP、Null/Loopback。その上に ARP、オプションとフラグメント再構成つきの IPv4、拡張ヘッダつきの IPv6、ICMPv4、NDP を含む ICMPv6、全フラグ・オプション・シーケンス解析つきの TCP と UDP。さらに DNS、chunked とセグメント跨ぎ再構成に対応した HTTP/1、TLS のレコードとハンドシェイク、平文 HTTP/2（HPACK 込み）、QUIC。**復号・解析しないもの**は脚注に隠さず、ツリーの上の誠実な但し書きパネルに書いてあります。

## Limits

Does not capture live traffic from the browser and does not decrypt TLS; it parses .pcap/.pcapng files you already have.

## Machine output

Copy JSON copies an envelope `{ tool, url, generatedAt, userAgentHint, result }`. `tool` is `"pcap-viewer"`; `result` is the on-screen capture summary and packet-list columns below. The dropped file name, packet payload bytes, hex dumps, and follow-stream bodies are omitted. DNS names and TCP flags appear only as they do in the Info column.

- `format` (string | null) — `"pcap"` | `"pcapng"`. `null` = not supplied.
- `byteOrder` (string | null) — `"LE"` | `"BE"`. `null` = not supplied.
- `version` (object | null) — Container version `{ major, minor }`. `null` = not supplied.
- `packetCount` (number | null) — Packets the container declared. `null` = not supplied.
- `byteLength` (number | null) — Capture size in bytes. `null` = not supplied.
- `firstTimestampNs` (string | null) — First packet time as a decimal nanosecond string. `null` = not present on the summary.
- `lastTimestampNs` (string | null) — Last packet time as a decimal nanosecond string. `null` = not present on the summary.
- `gunzipped` (boolean) — The file was gunzipped before parsing.
- `shb` (object | null) — Section header hardware / os / userAppl (each string or `null`). `null` = no SHB option block on screen.
- `interfaces` (object) — Capture interfaces as shown (id, linkType, linkTypeName, snapLen, name or `null`), capped at 200. `totalCount` is the real interface count.
- `comments` (object) — SHB/EPB comments in file order, capped at 200.
- `decryptionSecrets` (object | null) — DSB presence as shown: `count` and `types` only — never key material. `null` = no secrets block.
- `warnings` (object) — Parse warnings in parse order, capped at 200. Each: `frame` (0 = container), `message`.
- `packets` (object) — Packet-list rows in file order, capped at 200. Each: `number`, `timestampNs` (decimal string), `originalLength`, `capturedLength`, `streamId` (or `null`), `protocol` (or `null` if the cell was empty; `"raw"` = not dissected; `"data"` = unknown application payload), `source`, `destination`, `info`. `totalCount` is `max(container packetCount, supplied length)`, not the copied length. Payload bytes are omitted.
- `protocolCounts` (object) — Packet and on-wire byte counts per protocol, counted over every supplied packet (not the copied prefix), sorted by packets descending then protocol. Capped at 200.
- `talkers` (object) — Packet and on-wire byte counts per source/destination address, counted over every supplied packet, sorted by packets descending then address. Capped at 200. `totalCount` is the real distinct-address count.

## FAQ

### キャプチャはどこかに送られますか？

送られません。ファイルは FileReader で読まれ、同じタブ内の Web Worker に渡され、そこで解析されます。使用中このページは通信を 1 本も出さないので、DevTools の Network タブを開いたまま空のままであることを確認できます。このツールでは特に重要な点です。キャプチャには内部トポロジ、ホスト名、しばしば証明書まで入っていて、2 パケット読むためにそれを見ず知らずのサーバーに渡すのは割に合いません。

### どのくらいの大きさまで開けますか？

256 MiB までです。解析にはファイル全体がタブのメモリに載る必要があり、それを超えるとブラウザは処理を終える前にタブごと落とす方が普通なので、固まる代わりに正直に断ります。大きいキャプチャは先に分割してください。`editcap -c 200000 big.pcap part.pcap` なら 20 万パケットずつに切れますし、`tcpdump -r big.pcap -w small.pcap -c 100000` なら先頭 10 万パケットを取り出せます。`.pcap.gz` はタブ内で展開しますが、上限は展開後のサイズに対して同じです。

### TLS や HTTPS の中身は復号できますか？

できませんし、できるふりもしません。セッション鍵がなければ TLS のアプリケーションデータは暗号文のままです。平文で流れているものは全部出します。レコード層、ハンドシェイク、SNI、ALPN、提示・合意されたバージョンと暗号スイート、証明書のサブジェクト / 発行者 / 有効期間 / SAN。HTTP/2 は平文（h2c または prior knowledge）のときだけ読めます。TLS の上の h2 は読めません。QUIC は Initial パケットだけが復号できます（鍵は RFC 9001 の公開値から導けるため）。したがって「これは HTTP/3 だ」と示し、ClientHello の SNI と ALPN を出すところまでで、その先はありません。

### pcapng は TLS 鍵を持てますが、それは使いますか？

報告はしますが、使いません。pcapng には Decryption Secrets Block があり、`SSLKEYLOGFILE` を設定したブラウザで取得したキャプチャはセッション鍵をファイル内に抱えていることがあります。Wireshark ならそれで復号します。このツールはブロックを読み、鍵が何組・どの種類あるかを表示し、復号はしません。鍵を黙って持ったまま「暗号化されています」と言うのも、明らかに入っている鍵に触れないのも、どちらも不誠実です。報告してそこで止まるのが v1 の誠実な立ち位置です。

### 開けたのにツリーが空です。なぜ？

ほぼ確実に、このバージョンが解析しないリンク層です。v1 が扱うのは Ethernet、802.1Q / QinQ、Linux SLL / SLL2、raw IP、Null/Loopback です。Frame Relay、Token Ring、FDDI、radiotap つき 802.11、各種シリアルカプセル化は現実に存在し、そうしたファイルもここで開きます——コンテナもパケット一覧もタイムスタンプも生バイトも本物です——が、解析はフレームで止まります。画面にはリンク種別の名前と、そこで止まったことが明示されます。説明なしの空のツリーこそが、いちばん不誠実な壊れ方だからです。

### Wireshark の代わりになりますか？

誰かから送られてきたキャプチャを読むだけなら、たいていは代わりになります。何もインストールせず、アップロードフォームを信用する必要もありません。ライブキャプチャでは勝負になりません。ブラウザにはパケット取得の API がないので、このツールは他の何かが記録したファイルを開くだけです。Wireshark には鍵を与えての復号、数千のディセクタにまたがるエキスパート解析、Lua による拡張もあります。このページが狙うのは「ファイルを開く・目的のパケットを見つける・バイトを読む」という日常の側で、その境界も隠しません。

## Related tools

- [Subnet Calculator](https://bytescope.dev/ja/subnet-calculator.md) — キャプチャに出てきたアドレスがどのサブネットかを確かめる。
- [Certificate Decoder](https://bytescope.dev/ja/certificate-decoder.md) — TLS ハンドシェイクで見た証明書を貼って中身を読む。
- [WebRTC Test](https://bytescope.dev/ja/webrtc-test.md) — キャプチャを疑う前に、回線そのものを確かめる。
- [Hex Editor](https://bytescope.dev/ja/hex-editor.md) — 同じ 16 進ペインで、任意のファイルの生バイトを開く。
