当前位置: 首页 > 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()

相关文章:

  • [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命令:排序
  • 网站 文件注入/徐州网站设计
  • 本溪 网站建设 做网站/做网络推广需要多少钱
  • wordpress登录注册页面模板/舟山百度seo
  • 深圳做网站做公司网站的公司/中国免费网站服务器下载
  • 分销网站怎么做/新闻热搜榜 今日热点
  • 聚兴大宗商品交易平台/aso优化是什么意思