Dante server对Java Socks5客户端和UDP的支持
我正在给你的客户写信 我已经准备好通过TCP进行自动化和udp关联 我得到了中继服务器的地址和端口,但我缺少udp传输的一些信息Dante server对Java Socks5客户端和UDP的支持,java,android,sockets,proxy,udp,Java,Android,Sockets,Proxy,Udp,我正在给你的客户写信 我已经准备好通过TCP进行自动化和udp关联 我得到了中继服务器的地址和端口,但我缺少udp传输的一些信息 clientSocket = new DatagramSocket(); IPAddress = InetAddress.getByName(serverHostname); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String
clientSocket = new DatagramSocket();
IPAddress = InetAddress.getByName(serverHostname);
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = "xxx";
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(
sendData,
sendData.length,
IPAddress,
sCon.getDstPort());
byte[] addr = sendPacket.getAddress().getAddress();
byte[]head = new byte[6+addr.length];
head[0] = (byte) 0x00; //RSV
head[1] = (byte) 0x00; //RSV
head[2] = (byte) 0x00; //frag
head[3] = (byte) 0x01; //Address type
//Put Address
System.arraycopy(addr,0,head,4,addr.length);
//Put port
head[head.length - 2] = (byte) (sendPacket.getPort() >> 8);
head[head.length - 1] = (byte) (sendPacket.getPort());
byte[] buf = new byte[head.length + sendPacket.getLength()];
byte[] data = sendPacket.getData();
//Merge
System.arraycopy(head,0,buf,0,head.length);
System.arraycopy(data,0,buf,head.length,sendPacket.getLength());
DatagramPacket updated = new DatagramPacket(
buf,
buf.length,
relayAddr,
relayPort);
clientSocket.send(updated);
袜子5 S版本->192.168.11.52
服务器主机名->192.168.11.39
客户端IP->192.168.11.49
示例情况
Target /192.168.11.39, port 9876
SOCKS5 RelayAddr /192.168.11.52, RelayPort 56945
但丁日志
block(0): udp: expected from 192.168.11.39.148, got it from 192.168.11.49.59124
每次都是192.168.11.39*.148*,我不知道哪里出了问题。
DatagramPacket从未到达目标主机。第五个数字是分配给SOCKS5服务器本地机器上的套接字的本地端口,我记得有时会弄乱Dante和日志有点抽象,但可能它告诉你,他在端口59124上期望的是在端口148上收到的,所以你有可能一次打开多个套接字吗?没有,只有一个。39是目标主机,49是客户端,所以这是源端口。Sock5 rfc只讨论目标端口,而不讨论源端口。是的,这就是我的意思,很抱歉让人费解。我的意思是“服务器的本地机器”,所以远程:-)我会考虑一下,如果我有什么想法,我会写。我发现了问题。rfc:o DST.ADDR所需目标地址o DST.PORT所需目标端口以网络八位字节顺序排列我误解了,DST.ADDR和DST.PORT是关于客户端而不是目标的