Zum Hauptinhalt springen

6. Replies (Antworten)

Die SOCKS-Anfrageinformationen werden vom Client gesendet, sobald er eine Verbindung zum SOCKS-Server hergestellt und die Authentifizierungs-Aushandlungen (Authentication Negotiation) abgeschlossen hat. Der Server bewertet die Anfrage und gibt eine wie folgt geformte Antwort zurück:

     +----+-----+-------+------+----------+----------+
|VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
+----+-----+-------+------+----------+----------+
| 1 | 1 | X'00' | 1 | Variable | 2 |
+----+-----+-------+------+----------+----------+

Wobei:

  • VER Protokollversion: X'05'
  • REP Antwortfeld (Reply Field):
    • X'00' erfolgreich (succeeded)
    • X'01' allgemeiner SOCKS-Serverfehler (general SOCKS server failure)
    • X'02' Verbindung durch Regelwerk nicht erlaubt (connection not allowed by ruleset)
    • X'03' Netzwerk nicht erreichbar (Network unreachable)
    • X'04' Host nicht erreichbar (Host unreachable)
    • X'05' Verbindung abgelehnt (Connection refused)
    • X'06' TTL abgelaufen (TTL expired)
    • X'07' Befehl nicht unterstützt (Command not supported)
    • X'08' Adresstyp nicht unterstützt (Address type not supported)
    • X'09' to X'FF' nicht zugewiesen (unassigned)
  • RSV RESERVIERT (RESERVED)
  • ATYP Adresstyp der folgenden Adresse
    • IP V4 address: X'01'
    • DOMAINNAME: X'03'
    • IP V6 address: X'04'
  • BND.ADDR Server-gebundene Adresse (Server Bound Address)
  • BND.PORT Server-gebundener Port in Netzwerk-Oktett-Reihenfolge (Server Bound Port in Network Octet Order)

Mit RESERVED (RSV) markierte Felder müssen auf X'00' gesetzt werden.

Wenn die gewählte Methode eine Kapselung für Zwecke der Authentifizierung, Integrität und/oder Vertraulichkeit einschließt, werden die Antworten in der methodenabhängigen Kapselung gekapselt.

CONNECT

In der Antwort auf einen CONNECT enthält BND.PORT die Portnummer, die der Server zugewiesen hat, um sich mit dem Ziel-Host (Target Host) zu verbinden, während BND.ADDR die zugehörige IP-Adresse enthält. Die bereitgestellte BND.ADDR unterscheidet sich oft von der IP-Adresse, die der Client verwendet, um den SOCKS-Server zu erreichen, da solche Server oft mehrfach beheimatet (Multi-Homed) sind. Es wird erwartet, dass der SOCKS-Server DST.ADDR und DST.PORT sowie die clientseitige Quelladresse und den Port bei der Bewertung der CONNECT-Anfrage verwendet.

BIND

Die BIND-Anfrage (BIND Request) wird in Protokollen verwendet, die erfordern, dass der Client Verbindungen vom Server akzeptiert. FTP ist ein bekanntes Beispiel, das die primäre Client-zu-Server-Verbindung (Primary Client-to-Server Connection) für Befehle und Statusberichte verwendet, aber eine Server-zu-Client-Verbindung (Server-to-Client Connection) für die Datenübertragung bei Bedarf (On Demand) verwenden kann (z.B. LS, GET, PUT).

Es wird erwartet, dass die Client-Seite eines Anwendungsprotokolls die BIND-Anfrage nur verwendet, um sekundäre Verbindungen (Secondary Connection) herzustellen, nachdem eine primäre Verbindung (Primary Connection) mit CONNECT hergestellt wurde. Es wird erwartet, dass ein SOCKS-Server DST.ADDR und DST.PORT bei der Bewertung der BIND-Anfrage verwendet.

Während einer BIND-Operation werden zwei Antworten vom SOCKS-Server an den Client gesendet. Die erste wird gesendet, nachdem der Server einen neuen Socket (Socket) erstellt und gebunden hat. Das BND.PORT-Feld enthält die Portnummer, die der SOCKS-Server zugewiesen hat, um auf eine eingehende Verbindung zu lauschen. Das BND.ADDR-Feld enthält die zugehörige IP-Adresse. Der Client wird diese Informationen typischerweise verwenden, um (über die primäre oder Kontrollverbindung) den Anwendungsserver über die Rendezvous-Adresse (Rendezvous Address) zu informieren. Die zweite Antwort erfolgt erst, nachdem die erwartete eingehende Verbindung erfolgreich war oder fehlgeschlagen ist.

In der zweiten Antwort enthalten die BND.PORT- und BND.ADDR-Felder die Adresse und Portnummer des verbindenden Hosts.

UDP ASSOCIATE

Die UDP ASSOCIATE-Anfrage (UDP ASSOCIATE Request) wird verwendet, um eine Assoziation (Association) innerhalb des UDP-Relay-Prozesses (UDP Relay Process) zur Verarbeitung von UDP-Datagrammen (UDP Datagram) herzustellen. Die Felder DST.ADDR und DST.PORT enthalten die Adresse und den Port, die der Client voraussichtlich zum Senden von UDP-Datagrammen für die Assoziation verwenden wird. Der Server kann diese Informationen verwenden, um den Zugriff auf die Assoziation zu beschränken. Wenn der Client zum Zeitpunkt des UDP ASSOCIATE nicht im Besitz der Informationen ist, muss der Client eine Portnummer und Adresse von allen Nullen verwenden.

Eine UDP-Assoziation wird beendet, wenn die TCP-Verbindung, auf der die UDP ASSOCIATE-Anfrage ankam, beendet wird.

In der Antwort auf eine UDP ASSOCIATE-Anfrage geben die Felder BND.PORT und BND.ADDR die Portnummer/Adresse an, an die der Client UDP-Anforderungsnachrichten senden muss, die weitergeleitet werden sollen.

Reply Processing (Antwortverarbeitung)

Wenn eine Antwort (REP-Wert anders als X'00') einen Fehler anzeigt, muss der SOCKS-Server die TCP-Verbindung kurz nach dem Senden der Antwort beenden. Dies muss spätestens 10 Sekunden nach der Erkennung der Bedingung erfolgen, die zu einem Fehler geführt hat.

Wenn der Antwortcode (REP-Wert von X'00') einen Erfolg anzeigt und die Anfrage entweder ein BIND oder ein CONNECT war, kann der Client nun mit dem Übergeben von Daten beginnen. Wenn die ausgewählte Authentifizierungsmethode eine Kapselung für Zwecke der Integrität, Authentifizierung und/oder Vertraulichkeit unterstützt, werden die Daten unter Verwendung der methodenabhängigen Kapselung gekapselt. Wenn Daten am SOCKS-Server für den Client ankommen, muss der Server die Daten entsprechend der verwendeten Authentifizierungsmethode kapseln.