SOCKS
Das SOCKS-Protokoll ist ein Internet-Protokoll, das Client-Server-Anwendungen erlaubt, protokollunabhängig und transparent die Dienste eines Proxyservers zu nutzen. SOCKS ist eine Abkürzung für „SOCKetS“.
Clients hinter einer Firewall, die eine Verbindung zu einem externen Server aufbauen wollen, verbinden sich stattdessen zu einem SOCKS-Proxy. Dieser Proxyserver überprüft die Berechtigung des Clients, den externen Server zu kontaktieren, und leitet die Anfrage an den Server weiter.
Das SOCKS-Protokoll wurde ursprünglich von NEC entwickelt (SOCKS-4). Die aktuelle Version 5 des Protokolls, wie beschrieben in RFC 1928,[1] erweitert die vorherigen Versionen um Unterstützung für UDP, Authentifizierung, Namensauflösung am SOCKS-Server und IPv6.
Im TCP/IP-Modell ist es eine Zwischenschicht zwischen der Anwendungsschicht und der Transportschicht.
Das SOCKS-4-Protokoll
Anfrage
Eine typische SOCKS-4 Verbindung baut sich, via TCP, wie folgt auf: Der Client verbindet sich zum Server und sendet solch ein Paket:
| Länge | Beschreibung |
|---|---|
| 1 Byte | Version (für SOCKS4: 0x04)
|
| 1 Byte | Befehl:
|
| 2 Bytes | Portnummer |
| 4 Bytes | IPv4-Adresse |
| unbestimmt | User-ID (optional; wenn keine Authentifizierung notwendig, diesen Abschnitt überspringen) |
| 1 Byte | Abschluss mit Null-Byte (0x00)
|
Antwort
| Länge | Beschreibung |
|---|---|
| 1 Byte | Null-Byte (0x00)
|
| 1 Byte | Antwortcode:
|
| 2 Byte | Beliebige Daten. |
| 4 Byte | Beliebige Daten. |
Beispiel
Fred möchte sich via SOCKS4 zu der IP 66.102.7.99 auf Port 80 verbinden. Dafür verbindet er sich via TCP zu dem SOCKS4-Proxy seiner Wahl und sendet folgende Anfrage:
| Version | Kommando | Portnummer | Adresse | User-ID | Abschluss |
|---|---|---|---|---|---|
0x04
|
0x01
|
0x00 0x50
|
0x42 0x66 0x07 0x63
|
0x46 0x72 0x65 0x64
|
0x00
|
Bei der User-ID ist "Fred" als Zeichenfolge in ASCII formatiert.
Darauf antwortet der Server mit "OK":
| Null-Byte | Antwortcode | Beliebige Daten | Beliebige Daten |
|---|---|---|---|
0x00
|
0x5A
|
0xXX
|
0xXX
|
0xXX ist hier ein Platzhalter für je ein beliebiges Byte.
Von da an werden alle Daten, die der Client (Fred) an den SOCKS-Proxy schickt, an 66.102.7.99 weitergeleitet und umgekehrt.
Das SOCKS-5-Protokoll
SOCKS-5 unterscheidet sich von SOCKS-4 vor allem durch bessere Authentifizierung, UDP und IPv6-Unterstützung.
Der Aufbau funktioniert nun so:
- Der Client verbindet sich zum Server und begrüßt ihn mit Authentifizierungsmethoden, die er selbst unterstützt.
- Der Server antwortet mit einer von den vom Client gesendeten Methoden.
- Abhängig von der Methode kann eine Reihe von Paketen versendet werden.
- Der Client sendet eine Verbindungsanfrage ähnlich wie bei SOCKS-4
- Der Server antwortet ähnlich wie bei SOCKS-4
| Byte | Name | Erklärung |
|---|---|---|
0x00
|
NO AUTHENTICATION REQUIRED | Keine Authentifizierung benötigt |
0x01
|
GSSAPI | GSSAPI, siehe RFC 2743.[2] Genutzt u. a. von Kerberos. |
0x02
|
USERNAME/PASSWORD | Authentifizierung mit Benutzername und Passwort, siehe RFC 1929[3] |
0x03 bis 0x7F
|
IANA ASSIGNED | Werden von der IANA vergeben |
0x80 bis 0xFE
|
RESERVED FOR PRIVATE METHODS | Für nicht öffentliche Methoden reserviert |
0xFF
|
NO ACCEPTABLE METHODS | Keine akzeptable Methode |
Der Client sendet als erstes seine Authentifizierungsmethoden:
| Länge | Beschreibung |
|---|---|
| 1 Byte | Version (für SOCKS-5: 0x05)
|
| 1 Byte | Anzahl der unterstützten Authentifizierungsmethoden |
| Bytes | Byte-Werte der unter 'Authentifizierungsmethoden' genannten Methoden, ein Byte pro Methode |
Der Server gibt die Auswahl der Methode bekannt
| Länge | Beschreibung |
|---|---|
| 1 Byte | Version (0x05)
|
| 1 Byte | Byte-Wert der Authentifizierungsmethode; 0xFF, wenn keine akzeptable Methode gefunden.
|
Die Verbindungsanfrage
So sieht die Verbindungsanfrage bei SOCKS-5 aus:
| Länge | Beschreibung |
|---|---|
| 1 Byte | Version (für SOCKS-5: 0x05)
|
| 1 Byte | Befehl: |
| 1 Byte | Reserviert: Muss 0x00 sein
|
| 1 Byte | Adress-Typ (Typ der Zieladresse):
|
Abhängig vom gewählten Adress-Typ:
| |
| 2 Byte | Port in Byte-Reihenfolge Big-Endian |
Die Serverantwort sieht so aus:
| Länge | Beschreibung |
|---|---|
| 1 Byte | Version (0x05)
|
| 1 Byte | Antwortcode (siehe Tabelle Antwortcodes) |
| 1 Byte | Reserviert: Muss 0x00 sein
|
| 1 Byte | Address-Typ:
|
Abhängig vom Adress-Typ:
| |
| 2 Byte | Port in Byte-Reihenfolge Big-Endian |
| Byte | Name | Erklärung | |
|---|---|---|---|
0x00
|
succeeded | Verbindung erfolgreich hergestellt | |
0x01
|
general SOCKS server failure | Serverfehler | |
0x02
|
connection not allowed by ruleset | Verbindung wegen der Serverkonfiguration nicht erlaubt. | |
0x03
|
Network unreachable | Das Zielnetzwerk ist nicht erreichbar | |
0x04
|
Host unreachable | Der Zielhost ist nicht erreichbar | |
0x05
|
Connection refused | Verbindung abgelehnt | |
0x06
|
TTL expired | Zielrechner zu weit entfernt | |
0x07
|
Command not supported | Kommando der Anfrage wird nicht unterstützt | |
0x08
|
Address type not supported | ATYP der Anfrage wird nicht unterstützt | |
0x09 bis 0xFF
|
Nicht vergeben | ||
SOCKS-Server
Liste von SOCKS-Servern:
- Delegate universaler Proxy-Server, unter anderem Socks-Server, Open Source
- mitmproxy universaler Proxy-Server, unter anderem Socks-Server, Open Source
- Dante Socks-Server
- Java Socks-Server, Open Source
- Socks4-Server
- mocks
- CuteSocks
- SSH als Socks-Server
SOCKS-Clients/SOCKS-Wrapper
Es existieren Programme, die es anderen Programmen ermöglichen, externe Netzwerke über SOCKS zu erreichen, ohne dass sie spezielle Unterstützung dafür mitbringen müssen:
Liste von SOCKS-Clients:
- Dante client
- FreeCap
- WideCap
- Open Text SOCKS Client (Nachfolger von „Hummingbird SOCKS“)
- ProxyCap
- SocksCap (Google Link)
- tsocks
- socat
- redsocks
- proxychains
- proxifier
- tun2socks
Spezifikationen
- RFC: – Ein SOCKS-basierender IPv4/IPv6-Gateway-Mechanismus. (englisch).
- RFC: – GSS-API-Authentifizierungsmethode für SOCKS V5. (englisch).
- RFC: – Benutzername/Passwort-Authentifizierung für SOCKS V5. (englisch).
- RFC: – SOCKS-Protokoll Version 5. (englisch).
Einzelnachweise
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.