Ethernet II 訊框 標頭 14 bytes + FCS 4 bytes
乙太網路上最常見的訊框格式。Wireshark 中每個封包的最外層通常就是它;網卡多半已在硬體剝除 FCS,所以擷取檔裡看不到最後 4 bytes。乙太網路酬載最小 46 bytes,不足處以 padding 補足。
| 欄位 | 位移 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Destination MAC | 0–5|6 B | 目的端實體位址。第一個位元組的最低位為 1 表示群播;ff:ff:ff:ff:ff:ff 為廣播。第二低位為 1 表示本地管理位址(隨機化 MAC)。 | eth.dst |
| Source MAC | 6–11|6 B | 來源端實體位址。前 3 bytes 為 OUI 廠商代碼,Wireshark 會自動解析成廠商名稱。 | eth.src |
| EtherType | 12–13|2 B | 上層協定代碼。常見值:0x0800 IPv4、0x0806 ARP、0x86DD IPv6、0x8100 802.1Q VLAN、0x8864 PPPoE。若數值 ≤ 1500 則代表長度(IEEE 802.3 格式)。 | eth.type |
| Payload | 14–|46–1500 B | 上層封包。不足 46 bytes 時補 padding,Wireshark 會顯示 Trailer / Padding。 | eth.padding |
| FCS | 尾端|4 B | CRC-32 檢查碼。多數擷取看不到(網卡已剝除),有的話可用於偵測線路錯誤。 | eth.fcs.status |
| 欄位 | 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| TPID | 16 bits | 標籤協定識別碼,固定 0x8100;QinQ 外層為 0x88A8。 | vlan.etype |
| PCP | 3 bits | 優先權(0–7),對應 QoS 分級。 | vlan.priority |
| DEI / CFI | 1 bit | 可丟棄指示位元。 | vlan.dei |
| VID | 12 bits | VLAN 編號 1–4094(0 與 4095 保留)。VLAN hopping 攻擊會出現雙層標籤。 | vlan.id |
課堂觀察點
比對 eth.src 與 ip.src 的長期對應關係,可看出 MAC 位址欺騙;同一 IP 短時間內換 MAC 是典型徵兆。
過濾特定主機的所有流量:eth.addr == 00:1a:2b:3c:4d:5e;只看廣播:eth.dst == ff:ff:ff:ff:ff:ff。
ARP 28 bytes(Ethernet / IPv4 情境)
把 IP 位址解析成 MAC 位址。無認證機制,是區網中間人攻擊的主要切入點,也是課堂上最容易示範的攻擊流量。
| 欄位 | 位移 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Hardware type | 0–1|2 B | 實體網路型態,乙太網路為 1。 | arp.hw.type |
| Protocol type | 2–3|2 B | 要解析的上層協定,IPv4 為 0x0800。 | arp.proto.type |
| Hardware size | 4|1 B | MAC 位址長度,固定 6。 | arp.hw.size |
| Protocol size | 5|1 B | IP 位址長度,IPv4 固定 4。 | arp.proto.size |
| Opcode | 6–7|2 B | 1 Request、2 Reply、3 RARP request、4 RARP reply。 | arp.opcode |
| Sender MAC | 8–13|6 B | 發送者 MAC。攻擊者偽造回應時,這裡填的是自己的 MAC。 | arp.src.hw_mac |
| Sender IP | 14–17|4 B | 發送者 IP。gratuitous ARP 中 sender IP 等於 target IP。 | arp.src.proto_ipv4 |
| Target MAC | 18–23|6 B | 目標 MAC。Request 時為全 0(尚未知道)。 | arp.dst.hw_mac |
| Target IP | 24–27|4 B | 要查詢的 IP 位址。 | arp.dst.proto_ipv4 |
課堂觀察點
Wireshark 內建 ARP 毒化偵測:arp.duplicate-address-detected 會標出同一 IP 被宣告成不同 MAC 的情況。
ARP 掃描(主機探測)表現為短時間內大量 arp.opcode == 1 且 target IP 連續遞增。
IPv4 標頭 20 bytes(最長 60 bytes)
網路層的定址與轉送。標頭以 32-bit 為一列,前 5 列為固定欄位,之後可接選項。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Version | bit 0–3|4 b | 版本號,固定 4。 | ip.version |
| IHL | bit 4–7|4 b | 標頭長度,單位為 4 bytes。最小 5(=20 bytes),最大 15(=60 bytes)。IHL > 5 表示有選項。 | ip.hdr_len |
| DSCP | bit 8–13|6 b | 差異化服務代碼點,QoS 分級(如 EF=46 語音)。 | ip.dsfield.dscp |
| ECN | bit 14–15|2 b | 明確壅塞通知。11 表示路徑上遇到壅塞(CE)。 | ip.dsfield.ecn |
| Total Length | byte 2–3|16 b | 標頭+酬載的總長度(bytes),最大 65535。與實際擷取長度不符時可能是被截斷或偽造。 | ip.len |
| Identification | byte 4–5|16 b | 分片重組識別碼。同一原始封包的所有分片共用此值。部分掃描工具會用固定值(如 Nmap 的 0x1234)。 | ip.id |
| Flags | byte 6 高 3 b | bit 0 保留(必須為 0,「evil bit」)、bit 1 DF 不可分片、bit 2 MF 後面還有分片。 | ip.flags.df ip.flags.mf |
| Fragment Offset | byte 6–7 低 13 b | 此分片在原封包中的位移,單位 8 bytes。重疊的位移是 teardrop 類攻擊與 IDS 規避的特徵。 | ip.frag_offset |
| TTL | byte 8|8 b | 存活跳數,每經一個路由器減 1,歸零即丟棄並回 ICMP Time Exceeded。初始值可推測作業系統:Linux/macOS 64、Windows 128、部分網路設備 255。 | ip.ttl |
| Protocol | byte 9|8 b | 上層協定編號:1 ICMP、2 IGMP、6 TCP、17 UDP、47 GRE、50 ESP、51 AH、89 OSPF。 | ip.proto |
| Header Checksum | byte 10–11|16 b | 僅涵蓋標頭,每一跳都要重算(因 TTL 改變)。Wireshark 因網卡 checksum offload 常顯示 incorrect,屬正常。 | ip.checksum.status |
| Source Address | byte 12–15|32 b | 來源 IP。可被偽造(IP spoofing),DDoS 反射攻擊的基礎。 | ip.src |
| Destination Address | byte 16–19|32 b | 目的 IP。 | ip.dst |
| Options | byte 20–|0–40 B | 如 Record Route、Timestamp、Loose/Strict Source Routing。實務上極少見,出現時通常值得追查。 | ip.opt.type |
課堂觀察點
同時看來源與目的:ip.addr == 192.168.1.10;整個網段:ip.addr == 10.0.0.0/8。
找出所有分片封包:ip.flags.mf == 1 || ip.frag_offset > 0。
IPv6 固定標頭 40 bytes
標頭長度固定、沒有 checksum、也不在中途分片。原本 IPv4 標頭裡的可選功能改由「延伸標頭」串接表示。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Version | bit 0–3|4 b | 固定 6。 | ipv6.version |
| Traffic Class | bit 4–11|8 b | 等同 IPv4 的 DSCP+ECN。 | ipv6.tclass |
| Flow Label | bit 12–31|20 b | 標示同一資料流,供路由器快速分類。 | ipv6.flow |
| Payload Length | byte 4–5|16 b | 酬載長度(不含 40 bytes 固定標頭,但含延伸標頭)。 | ipv6.plen |
| Next Header | byte 6|8 b | 下一個標頭的型態,編號沿用 IPv4 Protocol:6 TCP、17 UDP、58 ICMPv6、0 Hop-by-Hop、43 Routing、44 Fragment、59 無下一標頭。 | ipv6.nxt |
| Hop Limit | byte 7|8 b | 相當於 IPv4 的 TTL。 | ipv6.hlim |
| Source Address | byte 8–23|128 b | 來源位址。fe80::/10 為連結本地,2000::/3 為全球單播。 | ipv6.src |
| Destination Address | byte 24–39|128 b | 目的位址。ff00::/8 為群播(如 ff02::1 全節點)。 | ipv6.dst |
| Fragment header | 延伸|8 B | 僅由來源端加上:含 offset、M 旗標與 32-bit identification。 | ipv6.fraghdr.offset |
| Routing header | 延伸|可變 | 來源路由。Type 0 因安全問題已廢止,出現時應視為異常。 | ipv6.routing.type |
ICMP 標頭 8 bytes + 資料
網路層的錯誤回報與診斷。錯誤訊息會夾帶原始封包的 IP 標頭+前 8 bytes,Wireshark 會展開成內嵌的子樹。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Type | byte 0|8 b | 0 Echo Reply、3 Destination Unreachable、5 Redirect、8 Echo Request、11 Time Exceeded、13/14 Timestamp。 | icmp.type |
| Code | byte 1|8 b | 同一 Type 下的細分。Type 3 的 Code:0 net unreachable、1 host unreachable、3 port unreachable(UDP 掃描的關鍵回應)、4 需分片但 DF 已設。 | icmp.code |
| Checksum | byte 2–3|16 b | 涵蓋整個 ICMP 訊息。 | icmp.checksum |
| Identifier | byte 4–5|16 b | Echo 用於配對請求與回應,通常是行程 ID。 | icmp.ident |
| Sequence | byte 6–7|16 b | Echo 序號,遞增。ping 的第幾次。 | icmp.seq |
| Data | byte 8–|可變 | Windows ping 送 32 bytes 字母、Linux 送 56 bytes 含時間戳。異常長或內容具高熵,是 ICMP 隧道的徵兆。 | data.data |
| 回應時間 | — | Wireshark 自動計算的請求—回應延遲。 | icmp.resptime |
| 欄位 / Type | 數值 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Echo Request / Reply | 128 / 129 | IPv6 版 ping。 | icmpv6.type |
| Router Solicitation | 133 | 主機請求路由器通告。 | icmpv6.type == 133 |
| Router Advertisement | 134 | 路由器公告前綴與參數。偽造 RA 可劫持整段 IPv6 流量。 | icmpv6.nd.ra.router_lifetime |
| Neighbor Solicitation | 135 | 相當於 IPv6 的 ARP request。 | icmpv6.nd.ns.target_address |
| Neighbor Advertisement | 136 | 相當於 ARP reply,可被偽造做中間人。 | icmpv6.nd.na.target_address |
TCP 標頭 20 bytes(最長 60 bytes)
連線導向、可靠傳輸。分析封包時最常打交道的協定,序號、旗標與視窗大小三者合看,就能重建整段連線行為。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Source Port | byte 0–1|16 b | 來源埠。用戶端通常為 49152–65535 的暫時埠。 | tcp.srcport |
| Destination Port | byte 2–3|16 b | 目的埠,決定服務種類(80 HTTP、443 HTTPS、22 SSH、3389 RDP、445 SMB)。 | tcp.dstport |
| Sequence Number | byte 4–7|32 b | 本段第一個位元組的序號。Wireshark 預設顯示「相對序號」(連線起點為 0),原始值請看 tcp.seq_raw。 | tcp.seq |
| Acknowledgment Number | byte 8–11|32 b | 期望收到的下一個序號,僅在 ACK 旗標為 1 時有效。 | tcp.ack |
| Data Offset | byte 12 高 4 b | 標頭長度,單位 4 bytes。5=20 bytes(無選項),常見 8=32 bytes。 | tcp.hdr_len |
| Flags | byte 13|8 b | 見下表。三向交握為 SYN → SYN+ACK → ACK。 | tcp.flags |
| Window Size | byte 14–15|16 b | 接收方目前可接收的位元組數(流量控制)。實際值需乘上 Window Scale 選項的倍數。降到 0 代表接收端緩衝區已滿。 | tcp.window_size |
| Checksum | byte 16–17|16 b | 涵蓋偽標頭+標頭+資料。offload 造成的 incorrect 屬正常現象。 | tcp.checksum.status |
| Urgent Pointer | byte 18–19|16 b | URG 旗標為 1 時,指出緊急資料的結尾位移。現代協定幾乎不用,出現時值得留意。 | tcp.urgent_pointer |
| Option: MSS | kind 2|4 B | 最大分段大小,只在 SYN 中協商,乙太網路典型值 1460。 | tcp.options.mss_val |
| Option: Window Scale | kind 3|3 B | 視窗放大倍數(左移位數),只在 SYN 中協商。若擷取漏掉 SYN,Wireshark 算不出真實視窗。 | tcp.options.wscale.shift |
| Option: SACK | kind 4 / 5 | 選擇性確認,指出已收到的不連續區段,是丟包的直接證據。 | tcp.options.sack_le |
| Option: Timestamps | kind 8|10 B | TSval / TSecr,用於 RTT 量測與 PAWS 防繞回。 | tcp.options.timestamp.tsval |
| 旗標 | 位元 | 意義 | Wireshark 欄位 |
|---|---|---|---|
| CWR | 0x80 | 壅塞視窗已縮小(ECN 機制)。 | tcp.flags.cwr |
| ECE | 0x40 | ECN Echo,回報路徑壅塞。 | tcp.flags.ece |
| URG | 0x20 | 緊急指標有效。 | tcp.flags.urg |
| ACK | 0x10 | 確認號有效。連線建立後幾乎每個封包都會設。 | tcp.flags.ack |
| PSH | 0x08 | 要求立即上交應用層,不再緩衝。 | tcp.flags.push |
| RST | 0x04 | 重設連線。大量 RST 代表連接埠關閉或被防火牆阻斷。 | tcp.flags.reset |
| SYN | 0x02 | 請求建立連線並同步序號。 | tcp.flags.syn |
| FIN | 0x01 | 正常結束連線。 | tcp.flags.fin |
| 項目 | 觸發條件 | 教學用途 | Wireshark 欄位 |
|---|---|---|---|
| Stream index | 每條連線一個編號 | 追蹤單一連線最方便的入口,等同「Follow TCP Stream」。 | tcp.stream |
| Retransmission | 重送已傳過的序號 | 丟包或延遲的直接證據。 | tcp.analysis.retransmission |
| Duplicate ACK | 重複相同 ACK 號 | 接收端在提示缺段,通常先於快速重送。 | tcp.analysis.duplicate_ack |
| Zero window | 視窗降為 0 | 接收端來不及處理,效能瓶頸在應用層。 | tcp.analysis.zero_window |
| Time delta | 同一 stream 前後封包間隔 | 量測延遲、找出停頓點。 | tcp.time_delta |
| 問題總覽 | 任一異常 | 一次列出所有被標紅的 TCP 事件。 | tcp.analysis.flags |
課堂觀察點
只看交握起點(掃描偵測):tcp.flags.syn == 1 && tcp.flags.ack == 0。搭配 Statistics → Conversations,可看出一個來源打了幾百個埠。
NULL / FIN / Xmas 隱匿掃描:tcp.flags == 0x000、tcp.flags == 0x001、tcp.flags == 0x029。
UDP 標頭 8 bytes
無連線、無重送、無流量控制。標頭只有四個欄位,是課堂上對照 TCP 複雜度的最佳教材。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Source Port | byte 0–1|16 b | 來源埠。UDP 不需連線,可為 0(表示不期待回應)。 | udp.srcport |
| Destination Port | byte 2–3|16 b | 目的埠:53 DNS、67/68 DHCP、123 NTP、161 SNMP、443 QUIC、500 IKE、1900 SSDP。 | udp.dstport |
| Length | byte 4–5|16 b | 標頭+資料的總長度,最小 8。 | udp.length |
| Checksum | byte 6–7|16 b | IPv4 下可為 0 表示不檢查;IPv6 下強制必填。 | udp.checksum |
| Stream index | Wireshark 計算 | 同一組 IP/埠配對的編號,便於追蹤。 | udp.stream |
課堂觀察點
放大反射攻擊的特徵是「小請求換大回應」:udp.srcport == 53 && udp.length > 512,同理可看 NTP monlist(123)與 SSDP(1900)。
DHCP 固定 236 bytes + magic cookie + 選項
沿用 BOOTP 的訊框格式。前段是固定欄位,真正的訊息型態藏在選項 53 裡。Wireshark 3.0 之後欄位名稱由 bootp.* 改為 dhcp.*。
| 欄位 | 位移 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| op | 0|1 B | 1 BOOTREQUEST(用戶端送出)、2 BOOTREPLY(伺服器回應)。 | dhcp.type |
| htype / hlen | 1–2|各 1 B | 硬體型態(1=Ethernet)與位址長度(6)。 | dhcp.hw.type |
| hops | 3|1 B | 經過的中繼代理數;非 0 表示跨網段由 relay 轉送。 | dhcp.hops |
| xid | 4–7|4 B | 交易識別碼,把 Discover/Offer/Request/ACK 四個封包串成同一次租約流程。 | dhcp.id |
| secs / flags | 8–11|各 2 B | 已耗秒數;flags 最高位為 broadcast 旗標。 | dhcp.flags.bc |
| ciaddr | 12–15|4 B | 用戶端現有 IP(續租時才填)。 | dhcp.ip.client |
| yiaddr | 16–19|4 B | 伺服器配發給用戶端的 IP,Offer/ACK 的重點欄位。 | dhcp.ip.your |
| siaddr / giaddr | 20–27|各 4 B | 下一階段開機伺服器 IP/中繼代理 IP。 | dhcp.ip.relay |
| chaddr | 28–43|16 B | 用戶端硬體位址,前 6 bytes 為 MAC。DHCP starvation 攻擊會偽造大量不同的 chaddr。 | dhcp.hw.mac_addr |
| sname / file | 44–235|64+128 B | 伺服器主機名與開機映像檔名(PXE 環境會用到)。 | dhcp.server |
| Magic cookie | 236–239|4 B | 固定 0x63825363,標示其後為 DHCP 選項。 | dhcp.cookie |
| 選項 | 編號 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Message Type | 53 | 1 Discover、2 Offer、3 Request、4 Decline、5 ACK、6 NAK、7 Release、8 Inform。 | dhcp.option.dhcp |
| Subnet Mask | 1 | 子網路遮罩。 | dhcp.option.subnet_mask |
| Router | 3 | 預設閘道。惡意 DHCP 伺服器就是靠竄改這裡做中間人。 | dhcp.option.router |
| DNS Server | 6 | 網域名稱伺服器,同樣是攻擊者偏好竄改的欄位。 | dhcp.option.domain_name_server |
| Requested IP | 50 | 用戶端希望續用的 IP。 | dhcp.option.requested_ip_address |
| Lease Time | 51 | 租約秒數。 | dhcp.option.ip_address_lease_time |
| Server Identifier | 54 | 回應的 DHCP 伺服器 IP。網段內出現非預期的值=流氓 DHCP。 | dhcp.option.dhcp_server_id |
| Parameter Request List | 55 | 用戶端索取的參數清單。其順序構成作業系統指紋,可用於資產識別。 | dhcp.option.request_list_item |
| Hostname | 12 | 用戶端主機名稱,資產盤點的好材料。 | dhcp.option.hostname |
課堂觀察點
找出網段中所有回應的 DHCP 伺服器:dhcp.option.dhcp == 2,再看 ip.src 是否只有一個合法來源。
DNS 標頭 12 bytes + 四個區段
標頭之後依序為 Question、Answer、Authority、Additional 四段,每段的筆數由標頭的計數欄位決定。超過 512 bytes 時改走 TCP,前面會多 2 bytes 長度欄位。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Transaction ID | byte 0–1|16 b | 配對查詢與回應。可預測的 ID 是 DNS 快取毒化的前提。 | dns.id |
| QR | bit 16|1 b | 0 查詢、1 回應。 | dns.flags.response |
| Opcode | bit 17–20|4 b | 0 標準查詢、4 Notify、5 Update(動態更新)。 | dns.flags.opcode |
| AA | bit 21|1 b | 授權回應,來自該網域的權威伺服器。 | dns.flags.authoritative |
| TC | bit 22|1 b | 回應被截斷,用戶端應改用 TCP 重問。 | dns.flags.truncated |
| RD / RA | bit 23–24|各 1 b | 要求遞迴/伺服器支援遞迴。對外開放遞迴的伺服器易被當成放大攻擊跳板。 | dns.flags.recdesired |
| RCODE | bit 28–31|4 b | 0 NOERROR、2 SERVFAIL、3 NXDOMAIN(網域不存在)、5 REFUSED。大量 NXDOMAIN 是 DGA 惡意程式的典型徵兆。 | dns.flags.rcode |
| QDCOUNT / ANCOUNT | byte 4–7|各 16 b | 問題數與答案數。 | dns.count.answers |
| NSCOUNT / ARCOUNT | byte 8–11|各 16 b | 授權記錄數與附加記錄數(OPT/EDNS0 放在這裡)。 | dns.count.add_rr |
| QNAME | Question|可變 | 查詢名稱,以「長度+標籤」序列編碼,結尾為 0。 | dns.qry.name |
| QTYPE | Question|16 b | 1 A、28 AAAA、5 CNAME、15 MX、16 TXT、2 NS、12 PTR、252 AXFR(區域轉送)。 | dns.qry.type |
| TTL | Answer|32 b | 快取秒數。極短 TTL(如 < 60)配合頻繁變動的 A 記錄是 fast-flux 的特徵。 | dns.resp.ttl |
| RDATA | Answer|可變 | 實際資料:A 記錄為 4 bytes IP、AAAA 為 16 bytes、TXT 為字串。 | dns.a dns.aaaa dns.txt |
| 查詢名稱長度 | Wireshark 計算 | 用來抓 DNS 隧道:資料被編碼成超長的子網域名稱。 | dns.qry.name.len |
| 回應時間 | Wireshark 計算 | 查詢到回應的延遲,可用來找解析瓶頸。 | dns.time |
課堂觀察點
DNS 隧道:dns.qry.name.len > 50 && !mdns,再看查詢名稱是否為高熵的 base32/base64 片段。
未授權的區域轉送嘗試:dns.qry.type == 252。
HTTP/1.1 純文字,行尾為 CRLF
不是固定位元組格式,而是「起始行 + 標頭行 + 空行 + 主體」。Wireshark 把每個標頭都解析成獨立欄位,因此可以直接對標頭內容下過濾條件。
| 欄位 | 出現位置 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Method | 請求行 | GET、POST、PUT、DELETE、HEAD、OPTIONS。異常的 PUT/DELETE 或大量 OPTIONS 值得追查。 | http.request.method |
| Request URI | 請求行 | 請求的路徑與查詢字串。SQL injection、路徑穿越(../)都在這裡現形。 | http.request.uri |
| Version | 請求/狀態行 | HTTP/1.0 或 HTTP/1.1。 | http.request.version |
| Status Code | 狀態行 | 2xx 成功、3xx 轉址、4xx 用戶端錯誤(401 未授權、403 禁止、404 找不到)、5xx 伺服器錯誤。連續 401/403 是暴力破解的跡象。 | http.response.code |
| Host | 請求標頭 | 目標主機名。在共用 IP 的虛擬主機環境中,是唯一能辨識實際站台的欄位。 | http.host |
| User-Agent | 請求標頭 | 用戶端識別字串。工具類特徵(curl、python-requests、sqlmap、Nikto)常直接寫在這裡。 | http.user_agent |
| Referer | 請求標頭 | 來源頁面網址,可重建使用者的瀏覽路徑。 | http.referer |
| Cookie / Set-Cookie | 請求/回應標頭 | 工作階段權杖。明文 HTTP 下可被直接竊取,是課堂上示範 session hijacking 的素材。 | http.cookie http.set_cookie |
| Content-Length | 兩者 | 主體位元組數。與 Transfer-Encoding 同時出現時可能是請求走私(request smuggling)。 | http.content_length |
| Content-Type | 兩者 | 主體的 MIME 型態。宣稱是圖片卻傳出可執行檔,即為異常。 | http.content_type |
| Server | 回應標頭 | 伺服器軟體與版本,是資產盤點與弱點比對的來源。 | http.server |
| Authorization | 請求標頭 | Basic 認證僅為 base64 編碼,等同明文。 | http.authorization |
| Message Body | 空行之後 | 實際內容。可用「File → Export Objects → HTTP」直接還原傳輸的檔案。 | http.file_data |
| 回應時間 | Wireshark 計算 | 請求到回應的耗時。 | http.time |
課堂觀察點
抓明文憑證:http.request.method == "POST" && http.file_data contains "password"。
找可疑的下載:http.response.line contains "application/octet-stream",再用 Export Objects 取出檔案算雜湊。
TLS 紀錄層 5 bytes + 訊息
加密之後看不到內容,但交握階段是明文。ClientHello 與 ServerHello 裡的欄位足以辨識目的站台、用戶端軟體與加密強度,是加密流量分析的主戰場。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Content Type | byte 0|1 B | 20 ChangeCipherSpec、21 Alert、22 Handshake、23 Application Data。 | tls.record.content_type |
| Record Version | byte 1–2|2 B | 0x0301 TLS 1.0、0x0303 TLS 1.2。TLS 1.3 為相容性仍寫 0x0303,真實版本放在 supported_versions 延伸中。 | tls.record.version |
| Length | byte 3–4|2 B | 後續 fragment 的位元組數。 | tls.record.length |
| Handshake Type | fragment byte 0 | 1 ClientHello、2 ServerHello、11 Certificate、12 ServerKeyExchange、16 ClientKeyExchange、4 NewSessionTicket。 | tls.handshake.type |
| Random | 交握|32 B | 用戶端/伺服器亂數,參與金鑰推導。前 4 bytes 早期為時間戳。 | tls.handshake.random |
| Session ID | 交握|0–32 B | 工作階段重用識別碼。 | tls.handshake.session_id |
| Cipher Suites | 交握|可變 | 用戶端支援的加密套件清單(依偏好排序);ServerHello 則只回一個選定值。清單內容與順序構成 JA3 指紋。 | tls.handshake.ciphersuite |
| SNI | 延伸 0 | Server Name Indication,明文的目標網域名稱。加密流量中辨識連往何處的最關鍵欄位。 | tls.handshake.extensions_server_name |
| ALPN | 延伸 16 | 協商的應用協定:h2、http/1.1。 | tls.handshake.extensions_alpn_str |
| Supported Versions | 延伸 43 | TLS 1.3 真正的版本協商位置(0x0304)。 | tls.handshake.extensions.supported_version |
| Certificate | 交握訊息 11 | 伺服器憑證鏈。可展開看 CN、SAN、簽發者與有效期;自簽或即將過期的憑證是重要線索。 | tls.handshake.certificate |
| Alert | Content Type 21 | Level(1 warning/2 fatal)與描述,例如 handshake_failure、certificate_unknown。 | tls.alert_message.desc |
| Application Data | Content Type 23 | 已加密的內容;沒有金鑰則只能看長度與時序。 | tls.app_data |
課堂觀察點
列出所有交握中出現過的網域:tls.handshake.extensions_server_name(加入為欄位後再 File → Export Packet Dissections)。
找出仍使用舊版協定的連線:tls.handshake.type == 1 && tls.handshake.version < 0x0303。若要解密,可在 Preferences → Protocols → TLS 指定瀏覽器輸出的 SSLKEYLOGFILE。
802.11 無線訊框 MAC 標頭 24–30 bytes
需在 monitor mode 下擷取才看得到管理與控制訊框。擷取檔前面通常還有 Radiotap 標頭,那是網卡加上的中繼資訊,並非空中實際傳輸的內容。
| 欄位 | 位置 / 長度 | 說明 | Wireshark 欄位 |
|---|---|---|---|
| Type | FC bit 2–3|2 b | 0 管理、1 控制、2 資料。 | wlan.fc.type |
| Subtype | FC bit 4–7|4 b | 管理:8 Beacon、4 Probe Request、5 Probe Response、11 Authentication、12 Deauthentication。控制:11 RTS、12 CTS、13 ACK。 | wlan.fc.subtype |
| To DS / From DS | FC bit 8–9|各 1 b | 決定四個位址欄位的意義;兩者皆為 1 時是 WDS 橋接,會出現第四個位址。 | wlan.fc.tods wlan.fc.fromds |
| Retry | FC bit 11|1 b | 重送旗標。比例偏高代表訊號差或干擾。 | wlan.fc.retry |
| Protected | FC bit 14|1 b | 訊框主體已加密(WEP/WPA/WPA2)。 | wlan.fc.protected |
| Duration / ID | byte 2–3|2 B | 預約通道的微秒數(NAV),用於虛擬載波偵測。 | wlan.duration |
| Address 1 | byte 4–9|6 B | 接收端位址(RA)。 | wlan.ra |
| Address 2 | byte 10–15|6 B | 傳送端位址(TA)。 | wlan.ta |
| Address 3 | byte 16–21|6 B | 依 DS 位元而定,多半是 BSSID(AP 的 MAC)。 | wlan.bssid |
| Sequence Control | byte 22–23|2 B | 高 12 bits 為序號、低 4 bits 為分片號。序號跳動不連續可能有偽造訊框。 | wlan.seq |
| SSID(Beacon) | Frame Body 標籤 0 | 網路名稱。長度為 0 表示隱藏 SSID。 | wlan.ssid |
| 訊號強度 | Radiotap | 網卡量測的 dBm 值,可用來估算裝置遠近、定位流氓 AP。 | radiotap.dbm_antsignal |
| 通道頻率 | Radiotap | 擷取當下的頻道,MHz。 | radiotap.channel.freq |
課堂觀察點
去認證攻擊:wlan.fc.type_subtype == 0x000c,短時間內大量 deauth 指向同一用戶端即為攻擊。
WPA2 四向交握(解密流量需要它):eapol。裝置探測歷史:wlan.fc.type_subtype == 0x0004 可看出用戶端曾連過哪些 SSID。
Display Filter 語法規則
display filter(分析已擷取的封包)與 capture filter(BPF,擷取當下就過濾)語法不同,兩者不可互換 —— 這是課堂上最常見的混淆點。
| 類別 | 語法 | 說明 | 範例 |
|---|---|---|---|
| 比較 | == != > < >= <= | 數值與位址比較。!= 用在多值欄位(如 ip.addr)語意易錯,建議寫成 !(...)。 | ip.ttl <= 5 |
| 邏輯 | && || ! and or not | 組合條件,可用括號分組。 | tcp && !(tcp.port == 443) |
| 存在 | 欄位名 | 只寫欄位名,表示「此欄位存在」。 | http.cookie |
| 集合 | in {…} | 一次比對多個值。 | tcp.port in {80 443 8080} |
| 子字串 | contains | 在欄位或酬載中找位元組序列或字串。 | frame contains "admin" |
| 正規表示式 | matches | PCRE 比對,預設不分大小寫。 | http.host matches "\\.(ru|cn)$" |
| 切片 | [起始:長度] | 取欄位的部分位元組。 | eth.src[0:3] == 00:1a:2b |
| 時間 | frame.time_relative | 相對於擷取起點的秒數,可框出時間區間。 | frame.time_relative > 10 |
| 長度 | frame.len | 線路上的封包長度;frame.cap_len 為實際擷取長度。 | frame.len > 1400 |
| 封包編號 | frame.number | 封包在檔案中的序號。 | frame.number == 42 |
教學提示
要知道任何欄位的正確名稱,在封包明細窗格點選該欄位,狀態列左下角就會顯示;或右鍵 → Apply as Filter 直接生成語法。這比背名稱有效得多。