基于scapy 实现Doip client

通过前面两篇文章,已经了解如何通过scapy组装DoIP协议数据包和UDS协议数据包,数据包组装完成后最终的目标是希望发送给DoIP server用于诊断服务的请求,那么今天我们就通过scapy DoIP模块中的UDS_DoIPSocket类实现一个DoIP client。

通过UDS_DoIPSocket创建DoIP client实力,因为UDS_DoIPSocket的父类是DoIPSocket

可以通过父类的构造方法对DoIP client的参数进行设置。参数如下

ip: 目标地址

port: 目标端口,一般为13400

activate_routing: 如果设为True,默认发送UDS诊断数据包之前先发送路由激活数据

source_ address: 源地址

target_address: 目标地址

activation_type: 激活类型

#创建DoIP client socket,当前使用默认参数进行设置,即使用本地回环地址,
DoIP_client = UDS_DoIPSocket()
# 创建diagnosticSession数据包
diagnosticSession_pkt = UDS_Packet.diagnosticSession()
# 通过DoIP client socket 发送diagnosticSession
DoIP_client.send(diagnosticSession_pkt)

通过wireshark 对以上数据进行分析,因为这边只是在DoIP server端模拟了路由激活成功的数据包,通过交互数据进行分析

整体交互数据如下:

前三帧数据为TCP连接三次握手

第四帧是DoIP client发送的路由激活请求数据

基于scapy 实现Doip client_第1张图片

第五帧是根据TCP协议要求服务端收到数据后发送的ACK

第六帧是DoIP server回应的路由激活成功的反馈

基于scapy 实现Doip client_第2张图片

第七帧是根据TCP协议要求客户端收到数据的ACK

第八帧是根据客户端发送Diagnostic session数据包

基于scapy 实现Doip client_第3张图片

第九帧是根据TCP协议要求服务端收到数据的ACK

第十帧正常应该是服务端响应Diagnostic session的数据,我这边服务端只模拟了路由激活响应数据,大家可以根据自身需求进行组包模拟

当前DoIP client是直接断close socket,后续可以根据自身需求对DoIP client socket进行设置。

总结:

通过以上三篇文章,可以对scapy DoIP模块有了一些了解,该模块能帮助我们在不依赖客户端与服务端交互的情况下快速组包,通过真实的数据来深刻体会DoIP协议,最后我们通过UDS_DoIPSocket类实现了一个简单的DoIP client,实际应用场景中DoIP client还需要有很多考虑因素,当前市场主流是的doipclient 模块,该模块可以快速搭建一个可用的类似诊断仪客户端,后续内容给大家分享doipclient模块。

你可能感兴趣的:(汽车测试,网络,github,python,开源,功能测试)