Qué es Socks5 Proxy
¡Hola, queridos chicos! Hoy vamos a hablar de un tema muy interesante - la forma de escribir el código fuente del especificador proxy Socks5. No te asustes todavía, no es tan aterrador como suena, confía en mí, voy a desglosar este conocimiento para ti en un lenguaje fácil de entender. Sin más preámbulos, ¡vamos a la puerta!
¿Qué es un proxy Socks5? En pocas palabras, es un protocolo de red que reenvía el tráfico de red de un cliente a través de un servidor proxy a un servidor de destino. Para decirlo sin rodeos, es un punto de "descarga" que nos ayuda a ocultar nuestras direcciones IP, proteger nuestra privacidad y, al mismo tiempo, saltarse silenciosamente ciertas restricciones, permitiéndonos nadar en el océano de Internet. ¿No es genial?
Cómo escribir el código fuente del programa de especificación de proxy Socks5
Después de entender el concepto de proxy Socks5, puede que te preguntes ¿cómo escribir exactamente el código fuente del procedimiento especificado para proxy Socks5? No te preocupes, te lo contaré todo.
En primer lugar, el lenguaje que tenemos que utilizar es Python, porque Python es simple y fácil de usar, que es adecuado para nosotros los principiantes para empezar. Por supuesto, si estás familiarizado con otros lenguajes, también puedes escribir en el lenguaje que se te dé bien, pero este artículo tomará Python como ejemplo.
En primer lugar, tenemos que introducir algunas bibliotecas, a saber, socket, threading y struct. socket se utiliza para la comunicación de red, threading se utiliza para multi-threading, y struct nos ayuda a tratar con datos binarios. Aquí está el ejemplo de código:
ipipgothon
importar socket
importar roscado
importar estructura
establecer una conexión
El primer paso para escribir un proxy es establecer una conexión con el cliente (es decir, nosotros mismos). Necesitamos escuchar en un puerto y esperar una petición de conexión del cliente.
ipipgothon
def main().
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888)))
server_socket.listen(5)
server_socket.listen(5)
client_socket, addr = server_socket.accept()
t = threading.Thread(target=handle_client, args=(client_socket,))
t.start()
En el código anterior, creamos un socket `server_socket`, especificamos la dirección `127.0.0.1` y el puerto `8888`. A continuación, empezamos a escuchar a través de `server_socket.listen(5)` y aceptamos hasta 5 solicitudes de conexión al mismo tiempo.
Cuando un cliente solicita una conexión, aceptamos la conexión mediante `server_socket.accept()`, devolviendo el socket cliente `client_socket` y la dirección `addr`. A continuación, creamos un hilo `t` y pasamos `client_socket` como argumento a la función `handle_client`.
Tramitar las solicitudes de los clientes
Una vez que tenemos una conexión de cliente, necesitamos procesar la petición del cliente. Aquí podemos utilizar el formato especificado por el protocolo Socks5 para analizar la solicitud del cliente.
ipipgothon
def handle_client(client_socket):
version = client_socket.recv(1)
nmethods = client_socket.recv(1)
methods = client_socket.recv(ord(nmethods))
client_socket.send(struct.pack('!BB', 5, 0))
versión = client_socket.recv(1)
cmd = client_socket.recv(1)
rsv = client_socket.recv(1)
atype = client_socket.recv(1)
if atype == b'x01': addr = socket.
addr = socket.inet_ntoa(client_socket.recv(4))
elif atype == b'x03': addr = socket.inet_ntoa(client_socket.recv(4))
addr_len = ord(client_socket.recv(1))
addr = client_socket.recv(addr_len)
addr = client_socket.recv(addr_len)
Gestión # de direcciones IPv6, etc.
pase
port = struct.unpack('!H', client_socket.recv(2))[0]
target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
target_socket.connect((dirección, puerto))
client_socket.send(struct.pack('!BBBBIH', 5, 0, 0, 1, 0, 0))
forward(client_socket, target_socket)
En el código anterior, primero obtenemos el número de versión `version`, el número de métodos de autenticación soportados `nmethods` y los métodos de autenticación soportados `methods` en la petición del cliente. A continuación, enviamos el mensaje de retorno al cliente sin autenticación tal y como especifica el protocolo Socks5 a través de `client_socket.send()`.
A continuación, obtenemos el comando `cmd`, el campo reservado `rsv`, y el tipo de dirección `atype` de la petición del cliente. Dependiendo del tipo de dirección, analizamos la dirección `addr` y el puerto `port`. A continuación, creamos un socket `target_socket` y nos conectamos al servidor de destino a través de `target_socket.connect()`.
A continuación, enviamos un mensaje de retorno al cliente a través de `client_socket.send()` indicando que la conexión se ha establecido correctamente, tal y como especifica el protocolo Socks5.
transmisión de datos
Por último, hay que reenviar los datos. Cuando el cliente envía datos al servidor proxy, éste los reenvía al servidor de destino; cuando el servidor de destino devuelve datos al servidor proxy, éste los reenvía al cliente. Este es el proceso de reenvío de datos.
ipipgothon
def forward(src_socket, dst_socket):: while True: ipipgothon
while True: datos = src_socket.recv(4096)
datos = src_socket.recv(4096)
if not data: break
dst_socket.sendallgothon
dst_socket.sendall(datos)
src_socket.close()
dst_socket.close()
En el código anterior, utilizamos un bucle para seguir recibiendo los datos enviados desde el cliente y enviarlos al servidor de destino a través de `dst_socket.sendall()`. Si no hay más datos, salimos del bucle y cerramos el socket del cliente `src_socket` y el socket del servidor de destino `dst_socket`.
resúmenes
Después de este esfuerzo, finalmente escribimos un sencillo programa proxy Socks5. Puede ayudarnos a ocultar nuestra dirección IP, proteger nuestra privacidad, saltarse las restricciones y permitirnos nadar libremente por Internet. ¿No es genial?
Por supuesto, esto es sólo un ejemplo simple, todavía hay un montón de detalles y características se pueden mejorar. Espero que tengas una comprensión más profunda de los proxies Socks5 y los métodos de escritura relacionados mediante el estudio de este artículo. Si estás interesado, puedes seguir explorando y mejorar tu nivel técnico ¡oh!
Bueno, esto ha sido todo por hoy, espero que os sirva de ayuda y os aporte algo. ¡Hasta la próxima!