【问题标题】:How to get VNC security type from server with sockets on Python?如何在 Python 上使用套接字从服务器获取 VNC 安全类型?
【发布时间】:2015-11-25 12:48:10
【问题描述】:

如何为 Python 创建一个脚本,该脚本将使用 port 连接到特定的 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”

【问题讨论】:

  • 分享你目前写的代码。
  • @k4ppa 再次检查我的问题
  • @ppperry 在 RFB 协议规范中,客户端发送客户端 vnc 查看器版本后,服务器必须发送服务器支持的安全类型
  • @ppperry vncdotool.readthedocs.org/en/latest/rfbproto.html#id21 我不使用这个程序,因为它对我的目的来说开销很大

标签: python python-2.7 python-3.x python-2.x vnc


【解决方案1】:

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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2014-12-04
    • 2010-12-20
    • 2011-09-10
    • 1970-01-01
    • 2017-09-13
    • 2018-11-19
    相关资源
    最近更新 更多