雖然wireshark自帶了很多知名協議的解析外掛程式,譬如http、dhcp等等,然而在實際應用環境中,有不少軟體之間的通訊協議都是私有的,如遊戲客戶端和伺服器之間的互動協議通常都是私有的,wireshark無法具體解析出各種字段之間的含義,只能顯示接收到的二進位制資料,給協議的分析和問題的排查帶來了一定的困難,尤其是協議內容比較複雜時。
本文乙個自定義的簡單協議入手,分析如何基於wireshark開發自定義協議分析外掛程式。
本書使用go語言來描述協議的互動過程。go由google出品,號稱是網際網路上的c語言,有點類似於c語言,以其簡潔和高併發著稱。
即使不了解go語言也沒有關係,本書給出的**,基本可以自釋其義,了解過程即可,重點不在於此。
1 package packet
2 3 import (
4 "bytes"
5 "encoding/binary"
6 "fmt"
7 "os"
8 )9 10 type npacket struct
15 16 func (packet *npacket) string() string
20 21 func checkerror(err error)
26 }
27 28 func converttopacket(b byte) (packet *npacket, err error)
32 #將緩衝區buffer的內容轉換到npacket結構體中
33 err = binary.read(buffer, binary.bigendian, packet)
34 35 return packet, err
36 }
37 38 func converttobuffer(packet *npacket) (b byte, err error)
1 package main
2 3 import (
4 "fmt"
5 "net"
6 )7 8 import "packet"
9 10 func main()
18 copy(pkt_send.buffer[:], "ping")
19 20 send_buff, err := packet.converttobuffer(&pkt_send)
21 packet.checkerror(err)
22 #傳送報文
23 conn.write(send_buff)
24 25 var recv_msg [4096]byte
26 #讀取報文
27 n, err := conn.read(recv_msg[0:])
28 packet.checkerror(err)
29 30 #報文轉換到結構體中
31 pkt_recv, err := packet.converttopacket(recv_msg[0:n])
32 packet.checkerror(err)
33 34 #會呼叫npacket結構體的string方法
35 fmt.println(pkt_recv)
36 }
1 package main
2 3 import (
4 "fmt"
5 "net"
6 )7 8 import "packet"
9 10 func recvudpmsg(conn *net.udpconn)
25 copy(pkt_send.buffer[:], "pong")
26 27 send_buff, err := packet.converttobuffer(&pkt_send)
28 packet.checkerror(err)
29 #傳送報文
30 _, err = conn.writetoudp(send_buff, raddr)
31 packet.checkerror(err)
32 }
33 34 func main()
1、啟動服務端
開啟cmd視窗,進入原始碼所在目錄
set gopath=原始碼所在目錄
go run src\main\server.go
2、啟動客戶端
開啟cmd視窗,進入原始碼所在目錄
set gopath=原始碼所在目錄
推薦:計算機類等經典類書籍收藏
wireshark外掛程式開發小結
關鍵字 wireshark,plugin,lua,protocol wireshark是非常流行的網路封包分析軟體,功能十分強大。可以抓取各種網路包,並顯示網路包的詳細資訊。為什麼使用wireshark troubleshoot network problems 定位網路問題 debug proto...
wireshark外掛程式開發 C外掛程式解析
相比較而言,c語言就比較麻煩,需要準備一堆開發環境和第三方庫,不夠簡潔,不過 c語言的乙個優點就是快。然而,lua語言在指令碼語言也是出了名的快,除非報文的流量非常大。大概章節劃分 目錄 2 1.導言 3 2.自定義協議 3 2.1.概述 4 2.2.協議描述 4 2.3.客戶端 5 2.4.服務端...
開發自己的One Page Scroll外掛程式(二)
開發自己的one page scroll外掛程式 一 我經常會不停地發布當前的版本,從而可以在github上得到不斷的反饋。我的開發模式是不斷的迭代。在開始的時候,我不會太關注它在手機上的效 果,其實到目前我也沒有關注這個問題。但其實我使用了乙個簡單的解決方案。通過檢測和轉換資料,從而在手機上同樣能...