我正在尝试使用Android中的VpnService在客户端上设置一个简单的tun设备,并在接收端运行一个c++服务器。但是我在使用VpnService时遇到了许多问题。这就是我需要的,我需要将Android手机发出的所有数据包路由到tun设备,并在程序中通过Datagram通道将其路由到服务器。当我发送字符串时,它可以正常工作,但是当我通过此Datagram通道发送其他数据时,在Wireshark中看不到任何UDP数据包:\
另外,我对Java和Datagram通道都很陌生。以下是我的代码。
上述配置到底是做什么的?从我的经验来看,tun设备应该只有一个IP,那么"192.168.56.0", 32是什么意思呢?当我尝试添加路由“0.0.0.0”,0时,整个安卓手机都会挂起并重新启动:\
这是我从接口中取出数据并放到另一个地方的过程。
另外,我对Java和Datagram通道都很陌生。以下是我的代码。
//To establish the tunnel
builder.setSession("MyVPNService")
.addAddress("192.168.56.0", 32)
.addDnsServer("8.8.8.4")
.addRoute("0.0.0.0", 1);
mInterface=builder.establish();
上述配置到底是做什么的?从我的经验来看,tun设备应该只有一个IP,那么"192.168.56.0", 32是什么意思呢?当我尝试添加路由“0.0.0.0”,0时,整个安卓手机都会挂起并重新启动:\
while (true) {
int length;
// Read the outgoing packet from the input stream.
length=in.read(packet_bytes);
//int length = in.read(packet.array());
if (length > 0) {
// Write the outgoing packet to the tunnel.
//packet.limit(length);
//tunnel.send(packe,server);
tunnel.send(packet,server);
packet.put(packet_bytes,0,length);
tunnel.write(packet);
packet.clear();
}
Thread.sleep(200);
// Read the incoming packet from the tunnel.
length = tunnel.read(packet);
if (length > 0) {
out.write(packet.array(), 0, length);
packet.clear();
// If we were sending, switch to receiving.
}
Thread.sleep(200);
}
这是我从接口中取出数据并放到另一个地方的过程。