• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

SOCKS5 Client in Python3 - Fehler im Handshake

wolfsjunge

Neu angemeldet

Registriert
18 Juli 2013
Beiträge
43
Guten Tag zusammen,

ich möchte gerne in dem asyncio Modul von Python3 SOCKS5 Unterstützung einbauen und arbeite mich daher (trotz des Ungleichgewichts zwischen Schwierigkeit des Unterfangens und meinen Fähigkeiten) in die SOCKS5 Spezifikation ein. Sie ist auf Wikipedia in deutsch und englisch zu finden, allerdings gilt wohl das RFC als Maßstab.

Ich wollte zunächst einfach feststellen, ob ich in Python einen primitiven Clientprototypen zusammenbauen kann, der nichts anderes tut als den SOCKS5 Handshake zu vollziehen. Ich nehme eine laufende Instanz von Tor als Socks Server. Hier mein Code:
Code:
#!/usr/bin/env python3

import sys
import struct
import socket

VER = 0x05
CMD_CONNECT = 0x01
RSV = 0x00

ADDR_IPV4 = 0x01

METHOD = [0x00]
NR_METHODS = len(METHOD)

auth_str = bytes([VER, NR_METHODS, 0x00])  # standard für tor ist NO AUTH

s = socket.socket()

s.connect(("127.0.0.1", 9050))

s.send(auth_str)
resp = s.recv(1024)

if resp[1] == 0xff:
    print("Could not connect.")
    sys.exit(0)

elif resp[1] == 0x00:
    print("No auth was accepted")

s.send(resp)

port_packed = struct.pack('!H', 80)
connection_request = bytes(
    [VER, CMD_CONNECT, RSV, ADDR_IPV4, 64, 15, 112, 182]) + port_packed
print("Connection request: {}" .format(connection_request))

s.send(connection_request)

resp = s.recv(1024)
print("Antwort: {}". format(resp))

Zunächst einige ich mich mit dem Proxy darauf, dass keine Authentifizierung notwendig ist, danach schicke ich meine Verbindungsanfrage. Der Aufbau dieser Anfrage sieht wie folgt aus (kopiert aus dem RFC 1928):
Code:
The SOCKS request is formed as follows:

        +----+-----+-------+------+----------+----------+
        |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |
        +----+-----+-------+------+----------+----------+
        | 1  |  1  | X'00' |  1   | Variable |    2     |
        +----+-----+-------+------+----------+----------+

     Where:

          o  VER    protocol version: X'05'
          o  CMD
             o  CONNECT X'01'
             o  BIND X'02'
             o  UDP ASSOCIATE X'03'
          o  RSV    RESERVED
          o  ATYP   address type of following address
             o  IP V4 address: X'01'
             o  DOMAINNAME: X'03'
             o  IP V6 address: X'04'
          o  DST.ADDR       desired destination address
          o  DST.PORT desired destination port in network octet
             order

Wie man sieht, schicke ich VER = 5, CMD_CONNECT = 1, das reservierte Nullbyte, den Wert für IPv4, IPV4_ADDR = 1, danach die IP und Port 80 in Network Byte Order. Die zurückgegebenen Bytes am Anfang der Antwort, \x05\x01, hingegen geben an, dass ein "General Socks server failure" aufgetreten ist.

Ich habe das Programm jemand anderem zur Prüfung gegeben, mit dem gleichen Ergebnis. Was habe ich also falsch gemacht? Ich kann keinen Fehler erkennen.

Vielen Dank für eure Hilfe.
 
Oben