如何验证shadowsocks服务器已准备就绪?

时间:2018-09-26 03:29:19

标签: java socks

我设置了shadowsocks服务器并启动它。我使用以下代码直接创建一个套接字以连接到服务器:

    Socket socket = new Socket();
    SocketAddress address = new InetSocketAddress("my.ss_server.ip",ss_server_port);
    socket.setSoTimeout(5 *1000);
    socket.connect(address);

    OutputStream os = socket.getOutputStream();
    InputStream is = socket.getInputStream();

    //byte[] VER = {0x05, 0x01, 0x00},socks5 protocol
    os.write(VER);
    os.flush();

    byte[] b = new byte[128];
    int a = is.read(b);

    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String result = bytesToHexString(b, 0, a);
    System.out.println(result);

但是不幸的是,终于读完了。我可以通过套接字直接连接到Shadowsocks服务器吗?有人知道如何创建一个简单的程序来验证Java中Shadowsocks服务器的连接吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

假设您询问“验证 shadowsocks 服务器是否已为客户端准备就绪”。所以我们不会谈论服务器端的事情。

这里有两种方法可以从客户端验证服务器端口:

  1. 通过命令行工具测试服务器上的开放端口:nc

    # -w 5: timeout in 5 seconds
    nc -z -w 5 <ss_server_ip> <user_port>
    

    成功的测试输出如下所示:

    Connection to <ss_server_ip> port <ss_user_port> [tcp/***] succeeded!
    

    否则,它什么都不输出,nc 以代码 1 退出。

    注意:此方法仅测试端口是否打开,并不能确定端口是否用于 Shadowsocks。

  2. 使用 Shadowsocks 管理器 API:

    这需要在服务端开启Shadowsocks manager API,它只支持libev和python版本。

    使用以下命令从客户端获取活着的Shadowsocks端口列表。

    请注意:ss_manager_ip 可能与 ss_server_ip 不同,它们可能侦听不同的 IP 地址,例如私有和公共 IP 地址,这取决于您的配置。而 ss_manager_port 绝对不同于 ss_user_port

    不喜欢方法 1,这种方法会告诉您服务器正在侦听哪些端口,但不能确保这些端口可从客户端访问。

    nc -u <ss_manager_ip> <ss_manager_port>
    ping
    

    如果 nc 不可用,请使用 bash:

    exec 3<>/dev/udp/<ss_manager_ip>/<ss_manager_port>
    echo ping >&3
    cat <&3
    

    或者使用 Python 代码(2.7),您可以轻松地将其移植到 Java:

    import socket
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
    s.connect((<ss_manager_ip>, <ss_manager_port>))
    s.send(b'ping')
    s.recv(4096)
    

答案 1 :(得分:0)

我在Windows CMD中ping服务器IP

>git diff a23a948:predictor/constants.py predictor/constants.py
fatal: Path 'predictor/constants.py' exists on disk, but not in 'a23a948'.

或者如果您像我一样使用Shadowsocks-libev

 Open the Windows Run box by pressing the Windows key and the letter R.

    Type CMD and press enter to open the command prompt.

    Type "ping " followed by the IP address to ping.

    Press Control + "C" key at the same time to stop the ping and see the summary statistics.