Преобразование скриптов 2.7 в 3 (сокеты) - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь преобразовать скрипт, написанный на python2.7, в python3.Первое препятствие заключается в том, как обрабатываются строки байтов между двумя, что, я думаю, я обошел.

Сценарий, на который я смотрю, таков: https://labs.mwrinfosecurity.com/tools/r...r-checker/

Первыйпрепятствие заключалось в том, как обрабатываются байтовые строки между этими двумя, что, я думаю, я обошел.

python3

s.send(packet.encode('utf-8'))

python2.7

s.send(packet)

СледующийКажется, проблема связана с реализацией сокетов.

for n in list(enc_protocols.keys()):
    packet = X224_CONNECTION_REQUEST % n

    print(binascii.hexlify(n.encode('utf-8')))

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    #s.sendall(packet.encode('utf-8'))
    s.send(packet.encode('utf-8'))
    #s.send(packet)
    response = s.recv(1024)
    #response = s.recv(4096)

    if (response[3] == "\x0b"):
        enc_protocols["\x00"][1] = True
        break
    else:
        if (response[11] == "\x02"):
            enc_protocols[n][1] = True
        else:
            errors[response[15]] = True

    #print binascii.hexlify(response)

    s.close()

В частности, эта строка:

response = s.recv(1024)

Выдает ошибку:

"Traceback (большинствопоследний вызов последним): файл "rdp_check_ciphers.py", строка 81, в ответе = s.recv (1024) ConnectionResetError: [Errno 104] Сброс соединения по пиру "

Я только после некоторогоуказатели на то, что, вероятно, является проблемой, если кто-то столкнулся с такой проблемой самостоятельно.

Я мог бы добавить, что код работает с python2.7 против моей виртуальной машины Windows 7.Я просто не понимаю, почему перемещение python3 дает мне ошибку ConnectionResetError.

Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2019

Вся проблема заключалась в том, что строки байтов обрабатывались по-разному в разных версиях python.

Например, необходимо внести следующие изменения:

enc_protocols = {b'\x00' : ["Native RDP", False], b'\x01' : ["SSL", False], b'\x03' : ["CredSSP", False]}
enc_methods = {b'\x01' : ["40-bit RC4", False], b'\x02' : ["128-bit RC4", False], b'\x08' : ["56-bit RC4", False], b'\x10' : ["FIPS 140-1", False]}
enc_levels = {b'\x00' : ["None", False], b'\x01' : ["Low", False], b'\x02' : ["Client Compatible", False], b'\x03' : ["High", False], b'\x04' : ["FIPS 140-1", False]}
...