sibson / vncdotool

A command line VNC client and python library
Other
451 stars 120 forks source link

Missing support for RFB 4.000, 4.001, 5.000 and newer AuthTypes #245

Closed robbyatbln closed 1 year ago

robbyatbln commented 1 year ago

Please include the following information:

vncdotool version 1.0.0

from vncdotool import api client = api.connect('192.168.178.111', password='raspberry') client.timeout = 10 client.captureScreen('screenshot.png') client.disconnect()

and this ERROR:

Traceback (most recent call last): File "D:\Programme\Python3\Lib\site-packages\vncdotool\api.py", line 103, in proxy_call result = self.queue.get(timeout=self._timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programme\Python3\Lib\queue.py", line 179, in get raise Empty _queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Users\maste\PycharmProjects\untitled6\venv\Lib\vncbild.py", line 4, in client.captureScreen('screenshot.png') File "D:\Programme\Python3\Lib\site-packages\vncdotool\api.py", line 105, in proxy_call raise TimeoutError("Timeout while waiting for client response") TimeoutError: Timeout while waiting for client response

Thanks for helping!!!

robbyatbln commented 1 year ago

on windows with python 3.11

pmhahn commented 1 year ago

This is not enough information to help you, as the problem way well be with your setup. Please test with vncdo -v -s 192.168.178.111 -p 'raspberry' capture 'screenshot.png' first and also make sure, that you can actually connect to IPv4 address 192.168.178.111 TCP port 5900 and that it is not blocked by any firewall rule and that the VNC server running there actually binds to a public interface — loopback lo is not enugh. To test this use some low-level tool like netcat and do a nc 192.168.178.111 5900: you should see some RFB 003.008 string printed — if not, investigate your network first.

robbyatbln commented 1 year ago

hi ican use the pi with vnc that works.

PS E:\Users\maste\PycharmProjects> vncdo -v -t 10 -s 192.168.178.111 -p 'raspberry' capture 'screenshot.png' INFO:root:connecting to 192.168.178.111:5900 INFO:twisted:Starting factory <vncdotool.command.VNCDoCLIFactory object at 0x0000026F2483DED0> INFO:twisted:Protocol version 5.000 not supported INFO:twisted:Using protocol version 3.800 INFO:twisted:unknown security types: (13, 5, 6, 130, 192) CRITICAL:root:TIMEOUT Exceeded (10.0s) CRITICAL:root:Connection to the other side was lost in a non-clean fashion: Connection lost. INFO:twisted:Stopping factory <vncdotool.command.VNCDoCLIFactory object at 0x0000026F2483DED0> INFO:twisted:Main loop terminated. PS E:\Users\maste\PycharmProjects>

and this is the nc output:

Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-01 15:47 Mitteleuropäische Zeit

Failed to resolve "5900".

Failed to resolve ":".

Failed to resolve ":".

Nmap scan report for raspberrypi.fritz.box (192.168.178.111)

Host is up (0.0048s latency).

Not shown: 996 closed tcp ports (reset)

PORT STATE SERVICE

22/tcp open ssh

53/tcp open domain

5900/tcp open vnc

8888/tcp open sun-answerbook

MAC Address: DC:A6:32:40:52:BC (Raspberry Pi Trading)

Failed to resolve ":".

Nmap done: 1 IP address (1 host up) scanned in 4.67 seconds

pmhahn commented 1 year ago

INFO:twisted:Protocol version 5.000 not supported

That is not a valid/supported VNC/RFB protocol version.

and this is the nc output:

What follows is the output of nmap not netcat. Please use nc or netcat or telnet or whatever tool to open a TCP connection to your host on TCP port 5900 and return its output, which should start with RFB 003.

robbyatbln commented 1 year ago

RFB 005.000 ist the output over telnet if i tried on a other pi i becam this error:

D:\Programme\Python3\python.exe E:\Users\maste\PycharmProjects\untitled6\venv\Lib\vncbild.py Unhandled Error Traceback (most recent call last): File "D:\Programme\Python3\Lib\site-packages\twisted\python\log.py", line 96, in callWithLogger return callWithContext({"system": lp}, func, *args, kw) File "D:\Programme\Python3\Lib\site-packages\twisted\python\log.py", line 80, in callWithContext return context.call({ILogContext: newCtx}, func, *args, *kw) File "D:\Programme\Python3\Lib\site-packages\twisted\python\context.py", line 117, in callWithContext return self.currentContext().callWithContext(ctx, func, args, kw) File "D:\Programme\Python3\Lib\site-packages\twisted\python\context.py", line 82, in callWithContext return func(*args, *kw) --- --- File "D:\Programme\Python3\Lib\site-packages\twisted\internet\selectreactor.py", line 148, in _doReadOrWrite why = getattr(selectable, method)() File "D:\Programme\Python3\Lib\site-packages\twisted\internet\tcp.py", line 248, in doRead return self._dataReceived(data) File "D:\Programme\Python3\Lib\site-packages\twisted\internet\tcp.py", line 253, in _dataReceived rval = self.protocol.dataReceived(data) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 685, in dataReceived self._handler() File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 694, in _handleExpected self._expected_handler(block, self._expected_args, **self._expected_kwargs) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 255, in _handleVNCAuth self.vncRequestPassword() File "D:\Programme\Python3\Lib\site-packages\vncdotool\client.py", line 375, in vncRequestPassword self.sendPassword(self.factory.password) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 261, in sendPassword des = RFBDes(pw) File "D:\Programme\Python3\Lib\site-packages\vncdotool\pyDes.py", line 410, in init self.setKey(key) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 835, in setKey if bsrc & (1 << i): builtins.TypeError: unsupported operand type(s) for &: 'str' and 'int'

Unhandled Error Traceback (most recent call last): File "D:\Programme\Python3\Lib\site-packages\twisted\python\log.py", line 96, in callWithLogger return callWithContext({"system": lp}, func, *args, kw) File "D:\Programme\Python3\Lib\site-packages\twisted\python\log.py", line 80, in callWithContext return context.call({ILogContext: newCtx}, func, *args, *kw) File "D:\Programme\Python3\Lib\site-packages\twisted\python\context.py", line 117, in callWithContext return self.currentContext().callWithContext(ctx, func, args, kw) File "D:\Programme\Python3\Lib\site-packages\twisted\python\context.py", line 82, in callWithContext return func(*args, *kw) --- --- File "D:\Programme\Python3\Lib\site-packages\twisted\internet\selectreactor.py", line 148, in _doReadOrWrite why = getattr(selectable, method)() File "D:\Programme\Python3\Lib\site-packages\twisted\internet\tcp.py", line 248, in doRead return self._dataReceived(data) File "D:\Programme\Python3\Lib\site-packages\twisted\internet\tcp.py", line 253, in _dataReceived rval = self.protocol.dataReceived(data) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 685, in dataReceived self._handler() File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 694, in _handleExpected self._expected_handler(block, self._expected_args, **self._expected_kwargs) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 255, in _handleVNCAuth self.vncRequestPassword() File "D:\Programme\Python3\Lib\site-packages\vncdotool\client.py", line 375, in vncRequestPassword self.sendPassword(self.factory.password) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 261, in sendPassword des = RFBDes(pw) File "D:\Programme\Python3\Lib\site-packages\vncdotool\pyDes.py", line 410, in init self.setKey(key) File "D:\Programme\Python3\Lib\site-packages\vncdotool\rfb.py", line 835, in setKey if bsrc & (1 << i): builtins.TypeError: unsupported operand type(s) for &: 'str' and 'int'

Traceback (most recent call last): File "D:\Programme\Python3\Lib\site-packages\vncdotool\api.py", line 103, in proxy_call result = self.queue.get(timeout=self._timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Programme\Python3\Lib\queue.py", line 179, in get raise Empty _queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "E:\Users\maste\PycharmProjects\untitled6\venv\Lib\vncbild.py", line 4, in client.captureScreen('screenshot.png') File "D:\Programme\Python3\Lib\site-packages\vncdotool\api.py", line 105, in proxy_call raise TimeoutError("Timeout while waiting for client response") TimeoutError: Timeout while waiting for client response

Process finished with exit code 1

and a long time a go i had something that works with this tool.... please help and thanks a lot of for your time

pmhahn commented 1 year ago

RFB 005.000 is a completely new protocol: each new version might add new messages or may change the semantics of previous messages. Because of that any VNC client must understand all messages associated with that version. If the client receives an unknown message the only reasonable things any client can do is to terminate the connection.

vncdotool only supports the following versions:

Several companies extended RFB as specified in the RFC on their own, but never provided a public specification for their changes, which anyone can access for free:

The current code already limits the supported version to 003.008 — albeit it is printed as 3.800 above, which is already fixed in the latest version currently in git — but then only unknown authentication types are offered, which vncdotool does not understand and thus does not support:

INFO:twisted:Protocol version 5.000 not supported
INFO:twisted:Using protocol version 3.800
INFO:twisted:unknown security types: (13, 5, 6, 130, 192)

non of them are supported by vncdotool — not even the version currently brewing in git branch main — so the client and server cannot agree to a common authentication mechanism and the client has to abort the connection.

vncdotool version 1.0.0

That version is way to old; you should try pip install git+https://github.com/sibson/vncdotool.git@main, which might also fix your 2nd problem

builtins.TypeError: unsupported operand type(s) for &: 'str' and 'int'