Abh*_*sht 3 c++ java vpn android
我正在尝试使用 Android 中的 VpnService 在客户端设置一个简单的 tun 设备,在接收端我有一个正在运行的 C++ 服务器。
我在使用 VpnService 时遇到很多问题。这就是我所需要的,我需要从 Android 手机出站的所有数据包都路由到 tun 设备,并且在程序中我通过数据报通道将其路由到服务器。当我发送字符串时,它工作正常,但是当我通过此数据报通道发送其他数据时,我在 Wireshark 中看不到任何 UDP 数据包:\
另外,我是 Java 和数据报通道的新手。这是我的代码
//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();
Run Code Online (Sandbox Code Playgroud)
上面的配置到底是做什么的?tun设备不是应该有一个IP(根据我在linux上做的经验),那么什么是“”192.168.56.0”,32”。另外,当我尝试添加路线“0.0.0.0”时,0整个 Android 手机挂起并重新启动:\
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);
}
Run Code Online (Sandbox Code Playgroud)
这是我从界面中取出它并将其放在另一个界面上的部分。
首先,我先解释一下上面的Builder配置。
builder.setSession("MyVPNService") // This one is optional.
.addAddress("192.168.56.0", 32) // This is used to assign interface address. First param is IP address, and second in prefix length. "Prefix" length is also commonly known as subnet mask.
.addDnsServer("8.8.8.4") // This configures the DNS network for VPN network. For ex - All DNS resolutions would go to 8.8.8.4:53. Note that the DNS request packets gets routed through the tun interface.
.addRoute("0.0.0.0", 1); // This controls the IP addresses which gets routed through tun interface.
Run Code Online (Sandbox Code Playgroud)
注意 - tun 接口可以支持多个地址系列 (IPv4/IPv6)。例如,您可以分配多个接口地址(例如一个 v4、一个 v6 或两个 v6 地址,或任何组合)。
同样,您可以添加您希望 VPN 处理的路由。现在,主要问题是如何决定我的 VPN 应该处理哪些路由?
嗯,有很多选择。
也就是说,这里是您问题的一些答案。
我需要将所有从 Android 手机出站的数据包路由到 tun 设备
请参阅上面的“路由所有内容”。
tun 设备不是应该有一个 IP 吗?
Linux 上的一个接口可以有多个从不同地址族分配给它的接口地址。
那么什么是“192.168.56.0”,32”。
如上所述,第一部分是 IP 地址,第二部分定义子网掩码。另请参阅CIDR 表示法。
另外,当我尝试添加路线“0.0.0.0”时,0整个Android手机挂起并重新启动。
0.0.0.0/0 表示整个 IPv4 地址空间将通过 VPN 进行路由。通常,VPN 无法处理链接本地流量,正如我上面提到的。因此,您必须排除某些本地子网(请参阅上面的链接)。至于电话挂起和重新启动,我不确定这是否与 VPN 有关,除非 VPN 无法正确处理流量(这会导致网络相关应用程序崩溃)。
| 归档时间: |
|
| 查看次数: |
3560 次 |
| 最近记录: |