Ein SOCKS-Proxyserver, der mit dem leistungsstarken Python-Framework für kooperative Parallelität asyncio implementiert ist.
Installieren Sie mit pip, wenn Python Version 3.8.0 oder höher verfügbar ist.
pip install asyncio-socks-server
Oder ziehen Sie ein Docker-Image aus der Docker Hub-Registrierung.
docker pull amaindex/asyncio-socks-server
Bei der Installation mit pip können Sie asyncio-socks-server über die Befehlszeile aufrufen:
asyncio_socks_server [-h] [-v]
[-H HOST] [-P PORT] [-A METHOD]
[--access-log] [--debug] [--strict]
[--env-prefix ENV_PREFIX]
[--config PATH]
Wo:
asyncio_socks_server
: Sie könnten python -m asyncio_socks_server in der Entwicklung verwenden.-h
, --help
: Hilfemeldung anzeigen und beenden.-v
, --version
: Versionsnummer des Programms anzeigen und beenden.-H HOST
, --host HOST
: Zu überwachende Hostadresse (Standard 0.0.0.0).-P PORT
, --port PORT
: Zu überwachender Port (Standard 1080).-A METHOD
, --auth METHOD
: Authentifizierungsmethode (Standard 0). Mögliche Werte: 0 (keine Authentifizierung), 2 (Benutzername/Passwort-Authentifizierung)--access-log
: Zugriffsprotokoll anzeigen.--debug
: Im Debug-Modus arbeiten.--strict
: Arbeiten Sie unter strikter Einhaltung von RFC1928 und RFC1929. Wenn der Wert von METHOD
2 ist, d. h. wenn die Benutzername/Passwort-Authentifizierung angegeben ist, müssen Sie mit der Option --config
eine Konfigurationsdatei bereitstellen, die die Benutzernamen und Passwörter im JSON-Format enthält. Sie können anstelle des Befehls auch andere Optionen in der Konfigurationsdatei auflisten:
config.json
:
{
"LISTEN_HOST" : " 0.0.0.0 " ,
"LISTEN_PORT" : 1080 ,
"AUTH_METHOD" : 2 ,
"ACCESS_LOG" : true ,
"DEBUG" : true ,
"STRICT" : true ,
"USERS" : {
"username1" : " password1 " ,
"username2" : " password2 " ,
"username3" : " password3 "
}
}
asyncio_socks_server --config ${ENV} /config.json
Darüber hinaus wird auch jede Umgebungsvariable, deren Name mit AIOSS_
beginnt, auf die Option angewendet. Das Präfix kann durch Angabe der Option --env-prefix
geändert werden, zum Beispiel:
export MY_LISTEN_HOST=127.0.0.1
export MY_LISTEN_PORT=9999
asyncio_socks_server --env-prefix MY_
HINWEIS: Die Ladereihenfolge der Optionen ist: Konfigurationsdatei, Umgebungsvariablen, Befehlsoptionen. Letzteres überschreibt Ersteres, wenn Optionen auf mehrere Arten angegeben werden.
Wenn Sie das Docker-Image verwenden, können Sie alternativ den asyncio-socks-server mit dem folgenden Befehl starten:
docker run amaindex/asyncio-socks-server [-h] [-v]
[-H HOST] [-P PORT] [-A METHOD]
[--access-log] [--debug] [--strict]
[--env-prefix ENV_PREFIX]
[--config PATH]
Der Netzwerkmodus- host
wird empfohlen, da der asyncio-socks-server mehrere Ports dynamisch verwendet. Wenn Sie auch eine Konfigurationsdatei bereitstellen möchten, sollte diese manuell gemountet werden.
docker run
--rm
--net=host
-v /host/path/config.json:/config.json
amaindex/asyncio-socks-server
--config /config.json
Aus verschiedenen Gründen hat asyncio-socks-server einige Kompromisse bei den Implementierungsdetails der Protokolle gemacht. Daher weicht das Verhalten des asyncio-socks-servers in den folgenden Szenen von dem in RFC1928 und RFC1929 beschriebenen Verhalten ab.
Bei der SOCKS5-Aushandlung wird eine UDP ASSOCIATE-Anfrage, die wie folgt aufgebaut ist, verwendet, um eine Zuordnung innerhalb des UDP-Relay-Prozesses zur Verarbeitung von UDP-Datagrammen herzustellen:
+----+-----+-------+------+----------+----------+
|VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+
| 1 | 1 | X'00' | 1 | Variable | 2 |
+----+-----+-------+------+----------+----------+
Normalerweise enthalten die Felder DST.ADDR und DST.PORT die Adresse und den Port, den der Client voraussichtlich zum Senden von UDP-Datagrammen für die Zuordnung verwenden wird, oder verwenden eine Portnummer und Adresse ausschließlich aus Nullen, wenn der Client nicht über diese Informationen verfügt. Wenn der Client in einem Netzwerk arbeitet, das NAT verwendet, sollte daher die DST.ADDR mit ausschließlich Nullen verwendet werden, um Fehler zu vermeiden. Für den Fall, dass einige Clients dieses Prinzip jedoch nicht korrekt befolgen, leitet der asyncio-socks-server standardmäßig alle empfangenen UDP-Datagramme weiter, anstatt DST.ADDR und DST.PORT zu verwenden, um den Zugriff einzuschränken.
Sobald der Client während der Aushandlung die Authentifizierung mit Benutzername und Passwort auswählt, führt er eine Unteraushandlung mit dem Server durch. Diese Unterverhandlung beginnt damit, dass der Kunde eine Anfrage stellt:
+----+------+----------+------+----------+
|VER | ULEN | UNAME | PLEN | PASSWD |
+----+------+----------+------+----------+
| 1 | 1 | 1 to 255 | 1 | 1 to 255 |
+----+------+----------+------+----------+
Das VER-Feld enthält die aktuelle Version der Unterverhandlung, die X'01' ist, aber oft als X'05' betrachtet wird, da sie etwas kontraintuitiv ist. Der asyncio-socks-server ermöglicht also Anfragen mit VER X'05' im nicht strengen Modus.
--strict
Option Um die oben beschriebene Kompromittierung zu deaktivieren, können Sie die Option --strict
angeben:
asyncio_socks_server --strict