java - 如何验证 shadowsocks 服务器是否已准备就绪?
问题描述
我设置了 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 服务器的连接吗?
非常感谢。
解决方案
假设您要询问“验证 shadowsocks 服务器是否已为客户端准备就绪”。所以我们不会谈论服务器端的事情。
以下是从客户端验证服务器端口的两种方法:
通过命令行工具测试服务器上的开放端口
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。
使用 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)
推荐阅读
- sql-server - 自动架构更改 SQL Server
- sql - 如何从具有字段名称作为默认关键字的 Oracle 表中选择值
- c++ - 将大括号括起来的初始化列表作为结构返回
- linux - 如何解决脚本中的“一元运算符预期”错误?
- javascript - 在定义之前执行的 Javascript 函数
- javascript - 将电影上传到应用服务时请求超时
- javascript - 如何使用 reactjs 或 nextjs 中的下拉选项为数组创建动态 const 名称?
- javascript - 如何在 Jquery 中获取 ID 动态?
- flutter - Flutter Mixed List - 如何使用混合列表中的两列将每 6 个项目推入网格样式?
- angular - Derective 在不同@angualr/cli 版本(9.0.2 和 8.3.14)的分层注入器中具有不同的行为