繁体   English   中英

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

[英]How can I verify that the shadowsocks server is ready?

我设置了 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);

但是很遗憾,最终读取超时。可以通过socket直接连接Shadowsocks服务器吗? 有人知道如何在java中创建一个简单的程序来验证Shadowsocks服务器的连接吗?

非常感谢。

假设您询问“验证 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)

我在windows CMD中ping服务器IP

 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.

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

systemctl status shadowsocks-libev.service

我创建了一个 docker 图像并使用它来检查客户端的服务器可用性。

主要思想:使用 ss-tunnel 将本地端口映射到www.google.com:80 ,然后将 HTTP 请求发送到本地端口,如果您的 ss-server 可用,您将获得有效的 HTTP 响应。

https://github.com/oylbin/shadowsocks_availability_monitor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM