如何在Windows上设置socks5代理

如何在Windows上设置socks5代理,windows,proxy,socks,Windows,Proxy,Socks,我用Python构建了一个简单的socks5服务器,它在本地主机上运行,但我不知道如何在windows上启用代理,以便所有传出流量都能通过代理 我尝试进入:控制面板->网络和互联网->互联网选项->连接->局域网设置->启用“为局域网使用代理”->进入高级并在socks部分输入127.0.0.1和端口号。 问题是我一直收到socks版本4请求,但在设置中没有看到socks 5选项 以下是我的socks5服务器代码,以备不时之需: import socket import threading im

我用Python构建了一个简单的socks5服务器,它在本地主机上运行,但我不知道如何在windows上启用代理,以便所有传出流量都能通过代理

我尝试进入:控制面板->网络和互联网->互联网选项->连接->局域网设置->启用“为局域网使用代理”->进入高级并在socks部分输入127.0.0.1和端口号。 问题是我一直收到socks版本4请求,但在设置中没有看到socks 5选项

以下是我的socks5服务器代码,以备不时之需:

import socket
import threading
import select


def socks5_handshake(client: socket.socket):
    """
    handle a new socks5 connection
    """
    assert client.recv(1) == b'\x05'
    num_of_methods = int.from_bytes(client.recv(1), 'big')
    methods = []
    for _ in range(num_of_methods):
        methods.append(client.recv(1))
    if b'\x00' not in methods:
        client.sendall(b'\x05\xff')
        raise Exception()
    client.sendall(b'\x05\x00')


def handle_request(client: socket.socket) -> socket.socket:
    """
    receive new connect request and return socket connected to specified address
    """
    assert client.recv(1) == b'\x05'
    assert client.recv(1) == b'\x01'
    assert client.recv(1) == b'\x00'
    address_type = client.recv(1)
    assert address_type in [b'\x01', b'\x03']
    if address_type == b'\x01':
        address = '.'.join([str(int.from_bytes(client.recv(1), 'big')) for _ in range(4)])
    else:
        length = int.from_bytes(client.recv(1), 'big')
        address = client.recv(length).decode()
    port = int.from_bytes(client.recv(2), 'big')

    forward_socket = socket.socket()
    forward_socket.connect((address, port))
    host, port1 = forward_socket.getsockname()
    client.sendall(b'\x05\x00\x00\x01' + bytes([int(byte) for byte in host.split('.')]) + port1.to_bytes(2, 'big'))
    return forward_socket


def handle_client(client: socket.socket):
    try:
        socks5_handshake(client)
        forward_socket = handle_request(client)
    except Exception:
        client.close()
        return

    # send back and fourth messages between the 2 sockets
    while True:
        r, w, x = select.select([client, forward_socket], [], [])
        if client in r:
            try:
                data = client.recv(4096)
                forward_socket.sendall(data)
                assert data
            except Exception:
                forward_socket.close()
                client.close()
                return
        if forward_socket in r:
            try:
                data = forward_socket.recv(4096)
                client.sendall(data)
                assert data
            except Exception:
                forward_socket.close()
                client.close()


server_socket = socket.socket()
server_socket.bind(('127.0.0.1', 2345))
server_socket.listen(5)

while True:
    conn, add = server_socket.accept()
    threading.Thread(target=handle_client, args=(conn,)).start()