ES-TCPTransport 3 - ES通信协议解析

1.wireshark提取数据elasticsearch协议包

设置抓取本机通信包:

  • a.以管理员身份打开命令提示符
  • b.输入 route add [本机ip] mask 255.255.255.255 [网关ip]
  • c.将我们程序里面的localhost或者127.0.0.1替换成本机ip

提取数据包信息:

使用程序发送es协议进行通信
- a.打开抓取整个系统包:

- b.过滤获取elasticsearch协议

  • c.通过程序进行es协议通讯获取es报文

  • d.提取整理es报文信息

注意:ES协议会议ES开头,ES是之前都是tcp/ip协议,ES(4553)开头才是应用层协议

提取整理后如上4个报文包的16进制结果如下:

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协议包

ES协议格式如下:

以handshake协议为例通过源码分析:

handshake的通信开始于TcpTransport.connectNode的方法,调用层次如下:

TcpTransport.connectNode()
    -openConnection()
        -executeHandshake() 
            -sendRequestToChannel() //发送请求
                -buildMessage() //根据请求(request)构建ES协议

由buildMessage代码片段可知ES协议传输有header和messageBody两部分构成:

header构建代码如下:

以handshake协议为例通过字节码分析:

提取整理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协议标记(2):45 53 = (ES)
报文长度(4):00 00 00 27 = (39)
requsteId(8):00 00 00 00 00 00 00 01 = 1
status(1):08 = 握手请求
注意:状态1=请求,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(可通过转码工具转换获取16进制结果)

附录:

使用程序地址: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
转码工具:http://www.bejson.com/convert/ox2str/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值