add comment

This commit is contained in:
speyrefitte
2013-11-05 18:27:11 +01:00
parent 4b752c3f64
commit 2c70639674
7 changed files with 61 additions and 45 deletions

View File

@@ -53,10 +53,10 @@ class RfbAdaptor(RfbObserver, QAdaptor):
implement RfbAdaptor interface implement RfbAdaptor interface
@param width: width of new image @param width: width of new image
@param height: height of new image @param height: height of new image
@param x: xpositionof new image @param x: x position of new image
@param y: y position of new image @param y: y position of new image
@param pixelFormat: pixefFormat structure in rfb.message.PixelFormat @param pixelFormat: pixefFormat structure in rfb.message.PixelFormat
@param encoding: encoding typpe rfb.message.Encoding @param encoding: encoding type rfb.message.Encoding
@param data: image data in accordance with pixelformat and encoding @param data: image data in accordance with pixelformat and encoding
''' '''
imageFormat = None imageFormat = None

View File

@@ -353,7 +353,7 @@ def readServerSecurityData(s):
read server security and fill it in settings read server security and fill it in settings
read all channels accepted by server by server read all channels accepted by server by server
@param s: Stream @param s: Stream
@return: list of chaeel id selected by server @return: list of channel id selected by server
''' '''
channelsId = [] channelsId = []
channelId = UInt16Le() channelId = UInt16Le()

View File

@@ -5,7 +5,7 @@ from twisted.internet import protocol
import tpkt, tpdu, mcs import tpkt, tpdu, mcs
class Factory(protocol.Factory): class Factory(protocol.Factory):
''' '''
Factory of RFB protocol Factory of RDP protocol
''' '''
def __init__(self): def __init__(self):
self._protocol = tpkt.TPKT(tpdu.TPDU(mcs.MCS())) self._protocol = tpkt.TPKT(tpdu.TPDU(mcs.MCS()))

View File

@@ -68,6 +68,9 @@ class Rfb(RawLayer):
def expectedBody(self, data): def expectedBody(self, data):
''' '''
read header and wait header value to call next state read header and wait header value to call next state
@param data: Stream that length are to header length (1|2|4 bytes)
set next state to callBack body when length read from header
are received
''' '''
bodyLen = None bodyLen = None
if data.len == 1: if data.len == 1:
@@ -84,28 +87,34 @@ class Rfb(RawLayer):
def connect(self): def connect(self):
''' '''
call when transport layer connection call when transport layer connection is made
is made in Client mode -> wait protocol version
in Server mode -> send protocol version
''' '''
if self._mode == ProtocolMode.CLIENT: if self._mode == ProtocolMode.CLIENT:
self.expect(12, self.readProtocolVersion) self.expect(12, self.recvProtocolVersion)
else: else:
self.send(self._version) self.send(self._version)
def readProtocolVersionFormat(self, data): def readProtocolVersion(self, data):
''' '''
read protocol version read protocol version and set
self._version var member
@param data: Stream may contain protocol version string (ProtocolVersion)
''' '''
data.readType(self._version) data.readType(self._version)
if not self._version in [ProtocolVersion.RFB003003, ProtocolVersion.RFB003007, ProtocolVersion.RFB003008]: if not self._version in [ProtocolVersion.RFB003003, ProtocolVersion.RFB003007, ProtocolVersion.RFB003008]:
self._version = ProtocolVersion.UNKNOWN self._version = ProtocolVersion.UNKNOWN
def readProtocolVersion(self, data): def recvProtocolVersion(self, data):
''' '''
read handshake packet read handshake packet
protocol version nego protocol version nego
if protocol receive from client is unknow
try best version of protocol version (ProtocolVersion.RFB003008)
@param data: Stream
''' '''
self.readProtocolVersionFormat(data) self.readProtocolVersion(data)
if self._version == ProtocolVersion.UNKNOWN: if self._version == ProtocolVersion.UNKNOWN:
print "Unknown protocol version %s send 003.008"%data.getvalue() print "Unknown protocol version %s send 003.008"%data.getvalue()
#protocol version is unknow try best version we can handle #protocol version is unknow try best version we can handle
@@ -115,11 +124,11 @@ class Rfb(RawLayer):
#next state read security #next state read security
if self._version == ProtocolVersion.RFB003003: if self._version == ProtocolVersion.RFB003003:
self.expect(4, self.readSecurityServer) self.expect(4, self.recvSecurityServer)
else: else:
self.expectWithHeader(1, self.readSecurityList) self.expectWithHeader(1, self.recvSecurityList)
def readSecurityServer(self, data): def recvSecurityServer(self, data):
''' '''
security handshake for 33 rfb version security handshake for 33 rfb version
server imposed security level server imposed security level
@@ -128,7 +137,7 @@ class Rfb(RawLayer):
self._version = data.read_beuint32() self._version = data.read_beuint32()
def readSecurityList(self, data): def recvSecurityList(self, data):
''' '''
read all security list read all security list
''' '''
@@ -144,9 +153,9 @@ class Rfb(RawLayer):
break break
#send back security level choosen #send back security level choosen
self.send(self._securityLevel) self.send(self._securityLevel)
self.expect(4, self.readSecurityResult) self.expect(4, self.recvSecurityResult)
def readSecurityResult(self, data): def recvSecurityResult(self, data):
''' '''
Read security result packet Read security result packet
''' '''
@@ -155,22 +164,22 @@ class Rfb(RawLayer):
if result == UInt32Be(1): if result == UInt32Be(1):
print "Authentification failed" print "Authentification failed"
if self._version == ProtocolVersion.RFB003008: if self._version == ProtocolVersion.RFB003008:
self.expectWithHeader(4, self.readSecurityFailed) self.expectWithHeader(4, self.recvSecurityFailed)
else: else:
print "Authentification OK" print "Authentification OK"
self.sendClientInit() self.sendClientInit()
def readSecurityFailed(self, data): def recvSecurityFailed(self, data):
print "Security failed cause to %s"%data.getvalue() print "Security failed cause to %s"%data.getvalue()
def readServerInit(self, data): def recvServerInit(self, data):
''' '''
read server init packet read server init packet
''' '''
data.readType(self._serverInit) data.readType(self._serverInit)
self.expectWithHeader(4, self.readServerName) self.expectWithHeader(4, self.recvServerName)
def readServerName(self, data): def recvServerName(self, data):
''' '''
read server name from server init packet read server name from server init packet
''' '''
@@ -183,18 +192,18 @@ class Rfb(RawLayer):
self.sendSetEncoding() self.sendSetEncoding()
#request entire zone #request entire zone
self.sendFramebufferUpdateRequest(False, 0, 0, self._serverInit.width.value, self._serverInit.height.value) self.sendFramebufferUpdateRequest(False, 0, 0, self._serverInit.width.value, self._serverInit.height.value)
self.expect(1, self.readServerOrder) self.expect(1, self.recvServerOrder)
def readServerOrder(self, data): def recvServerOrder(self, data):
''' '''
read order receive from server read order receive from server
''' '''
packet_type = UInt8() packet_type = UInt8()
data.readType(packet_type) data.readType(packet_type)
if packet_type == UInt8(0): if packet_type == UInt8(0):
self.expect(3, self.readFrameBufferUpdateHeader) self.expect(3, self.recvFrameBufferUpdateHeader)
def readFrameBufferUpdateHeader(self, data): def recvFrameBufferUpdateHeader(self, data):
''' '''
read frame buffer update packet header read frame buffer update packet header
''' '''
@@ -202,17 +211,17 @@ class Rfb(RawLayer):
nbRect = UInt16Be() nbRect = UInt16Be()
self._nbRect = data.readType((UInt8(), nbRect)) self._nbRect = data.readType((UInt8(), nbRect))
self._nbRect = nbRect.value self._nbRect = nbRect.value
self.expect(12, self.readRectHeader) self.expect(12, self.recvRectHeader)
def readRectHeader(self, data): def recvRectHeader(self, data):
''' '''
read rectangle header read rectangle header
''' '''
data.readType(self._currentRect) data.readType(self._currentRect)
if self._currentRect.encoding == Encoding.RAW: if self._currentRect.encoding == Encoding.RAW:
self.expect(self._currentRect.width.value * self._currentRect.height.value * (self._pixelFormat.BitsPerPixel.value / 8), self.readRectBody) self.expect(self._currentRect.width.value * self._currentRect.height.value * (self._pixelFormat.BitsPerPixel.value / 8), self.recvRectBody)
def readRectBody(self, data): def recvRectBody(self, data):
''' '''
read body of rect read body of rect
''' '''
@@ -223,16 +232,16 @@ class Rfb(RawLayer):
if self._nbRect == 0: if self._nbRect == 0:
#job is finish send a request #job is finish send a request
self.sendFramebufferUpdateRequest(True, 0, 0, self._serverInit.width.value, self._serverInit.height.value) self.sendFramebufferUpdateRequest(True, 0, 0, self._serverInit.width.value, self._serverInit.height.value)
self.expect(1, self.readServerOrder) self.expect(1, self.recvServerOrder)
else: else:
self.expect(12, self.readRectHeader) self.expect(12, self.recvRectHeader)
def sendClientInit(self): def sendClientInit(self):
''' '''
write client init packet write client init packet
''' '''
self.send(self._sharedFlag) self.send(self._sharedFlag)
self.expect(20, self.readServerInit) self.expect(20, self.recvServerInit)
def sendPixelFormat(self, pixelFormat): def sendPixelFormat(self, pixelFormat):
''' '''
@@ -297,12 +306,12 @@ class RfbObserver(object):
def notifyFramebufferUpdate(self, width, height, x, y, pixelFormat, encoding, data): def notifyFramebufferUpdate(self, width, height, x, y, pixelFormat, encoding, data):
''' '''
recv framebuffer update recv framebuffer update
width : width of image @param width : width of image
height : height of image @param height : height of image
x : x position @param x : x position
y : y position @param y : y position
pixelFormat : pixel format struct from rfb.types @param pixelFormat : pixel format struct from rfb.types
encoding : encoding struct from rfb.types @param encoding : encoding struct from rfb.types
data : in respect of dataFormat and pixelFormat @param data : in respect of dataFormat and pixelFormat
''' '''
pass pass

View File

@@ -5,6 +5,8 @@ Created on 4 sept. 2013
''' '''
from rdpy.protocol.rdp import rdp from rdpy.protocol.rdp import rdp
if __name__ == '__main__': if __name__ == '__main__':
from twisted.internet import reactor from twisted.internet import reactor
#reactor.connectTCP("127.0.0.1", 5901, factory.RfbFactory(protocol)) #reactor.connectTCP("127.0.0.1", 5901, factory.RfbFactory(protocol))

View File

@@ -2,12 +2,13 @@
@author: sylvain @author: sylvain
''' '''
from rdpy.protocol.rfb import factory import sys, os
from rdpy.protocol.rdp import tpkt, tpdu, mcs # Change path so we find rdpy
sys.path.insert(1, os.path.join(sys.path[0], '..'))
from rdpy.protocol.rdp import rdp
if __name__ == '__main__': if __name__ == '__main__':
from twisted.internet import reactor from twisted.internet import reactor
#reactor.connectTCP("127.0.0.1", 5901, factory.RfbFactory(protocol)) reactor.listenTCP(33389, rdp.Factory())
#reactor.connectTCP("192.168.1.90", 3389, factory.RfbFactory(tpkt.TPKT(tpdu.TPDU(mcs.MCS()))))
reactor.listenTCP(33389, factory.RfbFactory(tpkt.TPKT(tpdu.TPDU(mcs.MCS()))))
reactor.run() reactor.run()

View File

@@ -3,6 +3,10 @@
''' '''
import sys import sys
import os
# Change path so we find rdpy
sys.path.insert(1, os.path.join(sys.path[0], '..'))
from PyQt4 import QtGui from PyQt4 import QtGui
from rdpy.display.qt import RfbAdaptor, QRemoteDesktop from rdpy.display.qt import RfbAdaptor, QRemoteDesktop
from rdpy.protocol.rfb import rfb from rdpy.protocol.rfb import rfb