1.wireshark提取數(shù)據(jù)elasticsearch協(xié)議包
設(shè)置抓取本機(jī)通信包:
- a.以管理員身份打開(kāi)命令提示符
- b.輸入 route add [本機(jī)ip] mask 255.255.255.255 [網(wǎng)關(guān)ip]
- c.將我們程序里面的localhost或者127.0.0.1替換成本機(jī)ip
提取數(shù)據(jù)包信息:
使用程序發(fā)送es協(xié)議進(jìn)行通信
-
a.打開(kāi)抓取整個(gè)系統(tǒng)包:
- b.過(guò)濾獲取elasticsearch協(xié)議
-
c.通過(guò)程序進(jìn)行es協(xié)議通訊獲取es報(bào)文
-
d.提取整理es報(bào)文信息
注意:ES協(xié)議會(huì)議ES開(kāi)頭撼港,ES是之前都是tcp/ip協(xié)議,ES(4553)開(kāi)頭才是應(yīng)用層協(xié)議
提取整理后如上4個(gè)報(bào)文包的16進(jìn)制結(jié)果如下:
handshake-request(原包-9704):
0000 3c 8c 40 5e c6 c2 48 0f cf 45 47 aa 08 00 45 00
0010 00 55 5c b6 40 00 80 06 00 00 0a 64 21 9b 0a 64
0020 21 9b e2 dd 24 54 ca 23 d3 03 c0 82 f6 ae 50 18
0030 40 29 58 45 00 00 [45 53 00 00 00 27 00 00 00 00
0040 00 00 00 01 08 00 4c 4b a3 00 00 16 69 6e 74 65
0050 72 6e 61 6c 3a 74 63 70 2f 68 61 6e 64 73 68 61
0060 6b 65 00]
提取整理:
0030 40 29 58 45 00 00 [45 53 00 00 00 27 00 00 00 00
0040 00 00 00 01 08 00 4c 4b a3 00 00 16 69 6e 74 65
0050 72 6e 61 6c 3a 74 63 70 2f 68 61 6e 64 73 68 61
0060 6b 65 00]
handshake-response(原包-9706):
0000 3c 8c 40 5e c6 c2 48 0f cf 45 47 aa 08 00 45 00
0010 00 41 5c b7 40 00 80 06 00 00 0a 64 21 9b 0a 64
0020 21 9b 24 54 e2 dd c0 82 f6 ae ca 23 d3 30 50 18
0030 01 00 58 31 00 00 [45 53 00 00 00 13 00 00 00 00
0040 00 00 00 01 09 00 4c 4b a3 00 00 81 9b ee 02]
提取整理:
0030 01 00 58 31 00 00 [45 53 00 00 00 13 00 00 00 00
0040 00 00 00 01 09 00 4c 4b a3 00 00 81 9b ee 02]
自定義-UserRequest(原包-9708):
0000 3c 8c 40 5e c6 c2 48 0f cf 45 47 aa 08 00 45 00
0010 00 58 0b 9a 40 00 80 06 00 00 0a 64 21 9b 0a 64
0020 21 9b c4 08 24 54 7a d4 2d d6 bd 49 49 a6 50 18
0030 40 29 58 48 00 00 [45 53 00 00 00 2a 00 00 00 00
0040 00 00 00 2a 00 00 5b 8d 81 00 00 08 61 63 74 69
0050 6f 6e 5f 31 00 00 00 01 00 00 00 06 e7 8e 8b e4
0060 ba 94 00 00 00 17]
提取整理:
0030 40 29 58 48 00 00 [45 53 00 00 00 2a 00 00 00 00
0040 00 00 00 2a 00 00 5b 8d 81 00 00 08 61 63 74 69
0050 6f 6e 5f 31 00 00 00 01 00 00 00 06 e7 8e 8b e4
0060 ba 94 00 00 00 17]
自定義-UserResponse(原包-9710):
0000 3c 8c 40 5e c6 c2 48 0f cf 45 47 aa 08 00 45 00
0010 00 48 0b 9b 40 00 80 06 00 00 0a 64 21 9b 0a 64
0020 21 9b 24 54 c4 08 bd 49 49 a6 7a d4 2e 06 50 18
0030 01 00 58 38 00 00 [45 53 00 00 00 1a 00 00 00 00
0040 00 00 00 2a 01 00 5b 8d 81 00 00 00 00 00 03 06
0050 31 39 39 39 39 39]
提取整理:
0030 01 00 58 38 00 00 [45 53 00 00 00 1a 00 00 00 00
0040 00 00 00 2a 01 00 5b 8d 81 00 00 00 00 00 03 06
0050 31 39 39 39 39 39]
2.分析ES協(xié)議包
ES協(xié)議格式如下:
以handshake協(xié)議為例通過(guò)源碼分析:
handshake的通信開(kāi)始于TcpTransport.connectNode的方法掌敬,調(diào)用層次如下:
TcpTransport.connectNode()
-openConnection()
-executeHandshake()
-sendRequestToChannel() //發(fā)送請(qǐng)求
-buildMessage() //根據(jù)請(qǐng)求(request)構(gòu)建ES協(xié)議
由buildMessage代碼片段可知ES協(xié)議傳輸有header和messageBody兩部分構(gòu)成:
header構(gòu)建代碼如下:
以handshake協(xié)議為例通過(guò)字節(jié)碼分析:
提取整理handshake-request:
0030 40 29 58 45 00 00 [45 53 00 00 00 27 00 00 00 00
0040 00 00 00 01 08 00 4c 4b a3 00 00 16 69 6e 74 65
0050 72 6e 61 6c 3a 74 63 70 2f 68 61 6e 64 73 68 61
0060 6b 65 00]
ES協(xié)議標(biāo)記(2):45 53 = (ES)
報(bào)文長(zhǎng)度(4):00 00 00 27 = (39)
requsteId(8):00 00 00 00 00 00 00 01 = 1
status(1):08 = 握手請(qǐng)求
注意:狀態(tài)1=請(qǐng)求,2=異常夫偶,4=壓縮起愈,8=握手
version(4):00 4c 4b a3 = 5000099 = 5.0.0版本
messageBody:00 00 16 69 6e 74 65 72 6e 61 6c 3a 74 63 70 2f 68 61 6e 64 73 68 61 6b 65 00 = internal:tcp/handshake(可通過(guò)轉(zhuǎn)碼工具轉(zhuǎn)換獲取16進(jìn)制結(jié)果)
附錄:
使用程序地址:http://git.oschina.net/walleipt/es-cluster/blob/master/src/main/java/com/waleipt/api/es/tcptransport/Custom_protocol_test.java?dir=0&filepath=src%2Fmain%2Fjava%2Fcom%2Fwaleipt%2Fapi%2Fes%2Ftcptransport%2FCustom_protocol_test.java&oid=0226388674e92713b36d07b460a4f00d1936658d&sha=dab1c380bea009dcbed74985e6718226889253ee
wireshake樣本文件:https://pan.baidu.com/s/1dF6DvW1
轉(zhuǎn)碼工具:http://www.bejson.com/convert/ox2str/