精英总是狠狠地吸了一口烟,再慢慢地吐出来:用Wireshark !!!
我很迷茫:什么是Wireshark ?
精英的脸隐藏在烟雾之后,悠悠的说:神器一样存在的东西。
于是开始接触Wireshark的一些功能,深深的被它的强大所折服,不得不写一篇博客来纪念一下。
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
目前我们所用的到两个重要的功能是:
第一,过滤数据包,只显示自己感兴趣的数据包进行查看,这样就会非常有利于排除干扰,顺利推图。
目前我所知道的过滤的规则如下:
udp.port eq 15000
eth —> ip or arp —> tcp or udp —> data
第二,插件,插件可以让我们在上面做二次开发,尤其是可以显示游戏中的包的名字,这对推图非常的有利
do
cmds = {}
--[[
Proto.new(name, desc)
name: displayed in the column of “Protocol” in the packet list
desc: displayed as the dissection tree root in the packet details
--]]
local Hero = Proto("Hero", "Hero Packet")
--[[
ProtoField:
to be used when adding items to the dissection tree
--]]
--[[
(1)BH Packet Header
--]]
local f_bh_packlen = ProtoField.uint32("BH.PacketLen", "Length", base.DEC)
-- rtp over http interleaved channel(1 byte)
local f_bh_cmd = ProtoField.string("BH.Cmd", "CMD", base.DEC)
local f_bh_cmd_string = ProtoField.string("BH.CmdString", "CMD String", base.DEC)
-- define the fields table of this dissector(as a protoField array)
Hero.fields = {f_bh_packlen, f_bh_cmd, f_bh_cmd_string}
--[[
Data Section
--]]
local data_dis = Dissector.get("data")
function string2hex (s)
local hex = ""
for i=1, #s, 1 do
hex = hex .. string.format("%x", s:byte(i))
end
return hex
end
--[[
bh Dissector Function
--]]
local function bh_dissector(buf, pkt, root)
-- check buffer length
local buf_len = buf:len()
--[[
packet list columns
--]]
pkt.cols.protocol = "Hero"
pkt.cols.info = "Hero Packet"
--[[
dissection tree in packet details
--]]
-- tree root
local t = root:add(Hero, buf(0,buf:len()))
--local header = t:add(f_bh_cmd, buf(0,buf:len()))
-- child items
-- bh Header
local packlen = buf(0,4):uint()
pkt.cols.info = cmds[buf(4,4):uint()]
--data:add("content:", string2hex(buf(38, buf:len()-38)))
return true
end
--[[
Dissect Process
--]]
function Hero.dissector(buf, pkt, root)
if bh_dissector(buf, pkt, root)
then
-- valid bh diagram
else
data_dis:call(buf, pkt, root)
end
end
--[[
Specify Protocol Port
--]]
local tcp_encap_table = DissectorTable.get("tcp.port")
tcp_encap_table:add(11324, Hero)
tcp_encap_table:add(11311, Hero)
end
1. 找到wireshark 安装目录
2. 打开 init.lua (D:\Program Files\Wireshark\init.lua),用 — 注释disable_lua或者改为disable_lua=false。这样 wireshark 就会支持 Lua 了
-- Set disable_lua to true to disable Lua support.
disable_lua = false
if disable_lua then
return
end
3. 在 init.lua 结尾,添加 dofile(”1.lua”) ,wireshark 在每次启动时会自动载入1.lua