当前位置: 首页 > news >正文

doip诊断第二版优化

doip诊断第二版优化

就是要使用全局的socket,要实现 前端选中5个uds诊断命令,发送给后端,后端要保证这5个uds命令在一个socket中执行,
session 就和我们编程里面的 session 含义基本一样,就像是一个通道一样。比如 安全验证 在 10 03 会话中通过了,下面切换到 10 02会话那么还要重新验证 安全验证,因为 已经不在同一个会话里的,虽然还在 同一个socket中,socket 是5分钟会关闭。

有一个测试 uds命令 在每一个socket中 发第一次 返回TRUE,但是 如果在一个socket中连续发两次 第二次就会编程 false 这是正确的。
但是 如果你每次从前端 过来的命令都是 开启一个新的 socket 那么 这个uds命令 就会一直返回TRUE 就不正确了。

先删除原来的
pip3 uninstall PyQt5
pip3 uninstall PyQt5-sip
pip3 uninstall sip

pip3 install PyQt5
pip3 install PyQt5-sip
pip3 install sip

pip3 install pycryptodome
pip3 install crypto
pip3 install pycrypto
pip3 install scapy
pip3 install cffi==1.15

在这里插入代码片
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from scapy.all import *
# 后续按需更换文件路径
from PLayer.logMain import logger

# 全局socket
server_socket = None

def send_tcp_message(device, gateway, host, port, tcp_route, sessioned, address, ecu_sn, ecu_interview, ecu_secret, uds_payload_list):

 global server_socket
    return_message = "诊断异常"
      try:
        if server_socket is None:   
        server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   
        #server_socket.setsockopt(socket.SOL_SOCKET,25,gateway_byte_data) 这里暂时有问题 后续处理 先默认为  '以太网 3')
        # 连接到服务器
            server_socket.connect((host, port))
         # 发送路由激活报文
            return_message = send_tcp_route(server_socket)  
             # 创建对应session 不选使用默认session
        send_session(server_socket, address, sessioned)  
         # 27安全验证
        if ecu_sn and ecu_interview and ecu_secret:
            return_message = send_secret(server_socket, ecu_sn, ecu_interview, ecu_secret, address)
             # 服务请求
        if uds_payload_list == "null":
            pass
        else:
         return_message = send_uds_payload(server_socket, sessioned, address, uds_payload_list, ecu_sn,ecu_interview, ecu_secret)
        except Exception as e:
        logger.error("诊断异常,错误信息 -> %s" % str(e))
        return_message= "诊断异常"
        # 关闭套接字的读取和写入功能
        server_socket.shutdown(socket.SHUT_RDWR)
        # 关闭套接字
        server_socket.close()

    return return_message
 
 def send_tcp_route(server_socket):               
   # 1、发送路由激活报文
   binary_data = b"\x02\xFD\x00\x05\x00\x00\x00\x07\x00\x01\x00\x00\x00\x00\x00"
    server_socket.sendall(binary_data)
    response = server_socket.recv(1024)  # 接收最多1024字节的
     return response

前端

在这里插入代码片
前端
self.uds_payload_list.clear()
   self.uds_payload_list.append(self.uds_payload_str)
   self.uds_payload_list.append(self.uds_payload_str1)
   self.uds_payload_list.append(self.uds_payload_str2)
   self.uds_payload_list.append(self.uds_payload_str3)
 return_message_str = doip_nic_tool2.send_tcp_message(self.device, self.gateway, host, port,self.tcp_route, self.session, self.address,self.ecu_sn, self.ecu_interview, self.ecu_secret,self.uds_payload_list)
     self.return_message.setText(return_message_str)

def main():
   app = QApplication(sys.argv)
   ex = window()
   ex.show()
   ex.inputButton()
   sys.exit(app.exec_())
if __name__ == '__main__':
main()

http://www.dtcms.com/a/100796.html

相关文章:

  • [GWCTF 2019]我有一个数据库1 [CVE phpMyAdmin漏洞]
  • Android并发编程:线程池与协程的核心区别与最佳实践指南
  • Java线程特性
  • 1.1 斐波那契数列模型:LeetCode 1137.第 N 个泰波那契数
  • sqli-labs靶场 less 12
  • python笔记之函数
  • 时序数据库:InfluxDB命令行操作
  • 机械波的产生与传播
  • 鸿蒙学习手册(HarmonyOSNext_API16)_应用开发UI设计:相对布局
  • Redis常用的数据结构及其使用场景
  • 机器学习之回归算法
  • Verilog中X态的危险:仿真漏掉的bug
  • 【初阶数据结构】栈
  • 七年级角的概念
  • NNI 适配 TensorRT10教程
  • 人工智能之数学基础:幂法和反幂法求特征值和特征向量
  • Linux练习——有关硬盘、联网、软件包的管理
  • java项目之基于ssm的医院门诊挂号系统(源码+文档)
  • 001 使用单片机实现的逻辑分析仪——吸收篇
  • sort命令:排序
  • JS判断变量是否为空的方法
  • Maven 构建配置文件详解
  • Java高频面试之集合-20
  • 【区块链安全 | 第十二篇】安装 Solidity 编译器(npm | docker | Linux | macOS)
  • Qwen最新多模态大模型:Qwen2.5-Omni介绍与快速入门
  • 2025年渗透测试面试题总结- 某蚂蚁-安全工程师-实习(题目+回答)
  • 华为OD机试 - 王者荣耀匹配机制 - 回溯(Java 2024 D卷 200分)
  • arco design框架中的树形表格使用中的缓存问题
  • golang接口-interface
  • TCP 协议深度解析