Wireshark 学习笔记

Posted by API Caller on February 18, 2020

tshark

捕获

1
2
3
4
5
6
7
8
# 列举网卡
tshark -D

# 捕获编号为 1 的网卡
tshark -i 1

# 捕获WLAN 并存到文件
tshark -i WLAN -w wlan.pcap

解析

1
2
3
4
5
6
7
# 解析 wlan.pcap 中 tcp 远程端口为 80 的包
tshark -r wlan.pcap -R "tcp.dstport==80" -2

# 打印出 wlan.pcap 中 http 的部分信息
tshark -r wlan.pcap -Y http.request -T fields -e http.host -e http.request.uri -e http.user_agent -e ip


editcap

1
2
# 切分  对应 mergecap 
editcap -c 3 wlan.pcap new.pcap 

plugin for wireshark

Ref

example

目标: 解析这条 http 的 data 部分

长度: \x05 数据: 12345

tcp.len>0 && tcp.dstport==80 && http.host==example.com

1
echo -n -e "\x0512345" | curl -X POST --data-binary @- http://example.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
do
    local http_proto = Proto("http_extra", "Test self http");

    local f_http_data = Field.new("http.file_data")
    local f_http_host = Field.new("http.host")

    function http_proto.dissector(tvb, pinfo, tree)

        local http_host = f_http_host()
        -- filter domain
        if not http_host then return end
        if not (tostring(http_host) == "example.com") then return end

        local http_data = f_http_data()
        if not http_data then return end

        local http_data_str = tostring(http_data)

        local subtree = tree:add(http_proto):add("self define")

        -- lua array index starts from 1
        subtree:add(string.sub(http_data_str, 2))
    end

    register_postdissector(http_proto)
end


output:

1
2
3
▼ Test self http
  ▼ self define
       12345

debug

也没琢磨出来怎么调试, 为了方便起见我是直接 ln 或者 mklink 链接到插件目录, 然后 Ctrl + Shift + L 让 Wireshark 重新加载 Lua 插件.

Tools - Lua - Console 可以打日志1, 但是每次重新加载都会关闭, 所以每次要重新发包, 很麻烦.

pyshark

Ref