Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用通过python建立的tcp套接字上的原始数据包处理mysql登录?可能是因为盐?_Python_Mysql_Sockets_Mysql Python_Packet Capture - Fatal编程技术网

无法使用通过python建立的tcp套接字上的原始数据包处理mysql登录?可能是因为盐?

无法使用通过python建立的tcp套接字上的原始数据包处理mysql登录?可能是因为盐?,python,mysql,sockets,mysql-python,packet-capture,Python,Mysql,Sockets,Mysql Python,Packet Capture,我试图通过python程序模拟mysql连接过程。 在python脚本中,我打开一个到mysql服务器的tcp套接字,并在套接字上编写预捕获。 在登录数据包上,我收到一个错误“#28000用户'root'@'10.x.x.xxx'的访问被拒绝”(使用密码:是)” 上面使用的“req_r1”和“req_r2”文件包含原始数据包(mysql协议原始数据包,而不是整个帧/tcp层) 我正在通过套接字重放捕获 我跳过了TCP连接数据包(因为我正在通过python建立套接字连接) 我试图在套接字上编写原始

我试图通过python程序模拟mysql连接过程。 在python脚本中,我打开一个到mysql服务器的tcp套接字,并在套接字上编写预捕获。 在登录数据包上,我收到一个错误“#28000用户'root'@'10.x.x.xxx'的访问被拒绝”(使用密码:是)”

上面使用的“req_r1”和“req_r2”文件包含原始数据包(mysql协议原始数据包,而不是整个帧/tcp层)

  • 我正在通过套接字重放捕获
  • 我跳过了TCP连接数据包(因为我正在通过python建立套接字连接)
  • 我试图在套接字上编写原始数据包(mysql协议数据包),而不是整个帧
  • 谁能指导我如何克服这个问题。我认为错误是由于用于建立mysql连接的salt造成的

    我也试过了,但没有成功

    更新:据我所知,在建立tcp套接字连接时,db服务器使用salt进行回复,我需要重新使用此salt生成加密密码,并在下一个连接数据包中使用它。
    如果有人知道我是否在正确的轨道上,以及我如何提取/重用它,那将是非常有帮助的。

    您不能通过重播上一个会话来登录。正如评论中指出的那样,这将是非常不安全的。这是一种挑战/响应机制,您的响应因收到的挑战而异


    有关协议的详细信息,请参阅。

    您无法通过重播上一个会话登录。正如评论中指出的那样,这将是非常不安全的。这是一种挑战/响应机制,您的响应因收到的挑战而异


    有关协议的详细信息,请参阅。

    如果您可以通过重播以前的会话来重新创建会话,那将非常糟糕。我不知道mysql使用什么协议,但它会有某种质询/响应机制来确保它不能工作。您应该能够深入研究mysql文档,并了解它们的身份验证方案。感谢@tdelaney提供快速指导。我希望mysql不会太不安全,这样您就可以拦截tcp连接,从而模仿客户端的操作。出于合理的好奇心,我认为您应该深入研究
    mysql客户端
    code。它是用
    c
    编写的,可以安静地阅读,以便理解实际的身份验证协议,然后您可以尝试模拟它。如果您可以通过重播以前的会话来重新创建会话,那将非常糟糕。我不知道mysql使用什么协议,但它会有某种质询/响应机制来确保它不能工作。您应该能够深入研究mysql文档,并了解它们的身份验证方案。感谢@tdelaney提供快速指导。我希望mysql不会太不安全,这样您就可以拦截tcp连接,从而模仿客户端的操作。出于合理的好奇心,我认为您应该深入研究
    mysql客户端
    code。它是用
    c
    编写的,可以安静地阅读,以便理解实际的身份验证协议,然后您可以尝试模拟它。
    import socket
    import sys
    import time
    
    Host = '10.x.x.xxx'
    Port = '3306'
    
    t_con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clust_vip = (Host, int(Port))
    
    try:
      t_con.connect(clust_vip)
      print ('Socket connection established')
      print "TCP connection established:", t_con.recv(4096)
    
      byte1 = open("req_r1").read()
      t_con.send(byte1)
      print "Response for packet1:", t_con.recv(4096)
    
      bytes2 = open("req_r2").read()
      t_con.send(byte2)
      print "Response for packet2:", t_con.recv(4096)
    
    finally:
       t_con.close()