如何从 Python 上带有套接字的服务器获取 VNC 安全类型?

How to get VNC security type from server with sockets on Python?

如何为 Python 创建脚本,它将连接到具有端口的特定 ip,以及 print/return ,VNC 连接具有哪种安全类型?

import socket
def check(ip,port):
    vnc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    vnc.connect((ip,int(port)))
    vnc_ver = vnc.recv(12)
    print(vnc_ver)
    vnc.send(vnc_ver)
    print(vnc.recv(1024))
check("127.0.0.1","5900")

我刚得到输出:"RFB 003.008"

IETF RFC 6143(远程帧缓冲协议)定义安全握手发生在版本握手之后(参见 https://tools.ietf.org/rfc/rfc6143.txt 第 7.1.2 段)。

在安全握手的第一阶段,VNC 服务器应该:

  • 发送包含支持的安全类型数量的 1 个字节
  • 后跟支持的安全类型(每种安全类型编码在一个字节上)

因此 Python 脚本(类似于您问题中的脚本)可以这样显示支持的安全类型:

import socket

def displaySecurityType(sec_type):
    switcher = {
        0: "Invalid",
        1: "NONE",
        2: "VNC Authentication"
    } 
    print(' security type: ' + str(sec_type) + ' (' + switcher.get(sec_type,"Not defined by IETF") +')' )

def check(ip,port):
    vnc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    vnc.connect((ip,int(port)))
    vnc_ver = vnc.recv(12)
    print(vnc_ver)
    vnc.send(vnc_ver)
    nb_sec_types = ord(vnc.recv(1))
    print("Nb security types: " + str(nb_sec_types))
    for i in xrange(0,nb_sec_types):
        sec_type = ord(vnc.recv(1))
        displaySecurityType(sec_type) 
check("127.0.0.1","5900")