java - Android VpnService 如何在打开 Socket 之前处理传入的数据包?

标签 java android sockets network-programming vpn

我正在尝试使用 VpnService API 来捕获数据包(在 Android 4.4 上)。我一直在关注以下示例:

http://www.thegeekstuff.com/2014/06/android-vpn-service/

我使用构建器建立 vpn 连接,该构建器是使用以下代码配置的(这是从 ToyVPN 示例中借用的,我相信你们中的许多人都知道):

        // Configure a builder while parsing the parameters.
    Builder builder = new Builder();
    builder.setMtu(1500);
    builder.addAddress("192.168.0.1", 24);
    builder.addRoute("0.0.0.0", 0);
    try {
        mInterface.close();
    } catch (Exception e) {
        // ignore
    }

    mInterface = builder.establish();

一般概念是,使用 VpnService,我能够获取出站数据包并记录它们。然后我打开一个到原始目的地的套接字并转发数据包。当响应到来时,它将通过打开的套接字。

所以我的问题是,如果 IP 地址在我打开到该地址的套接字之前向我发送了一个数据包,会发生什么情况?我猜它要么绕过 VPN 并正常到达,要么完全掉线(可能是前者?)。感谢任何见解。

最佳答案

当你添加路由时("0.0.0.0",0); 所有数据包都将路由到此 Tun 接口(interface)。 现在由您决定是否要将它们转发到原始目的地。

所以回答你的问题是你仍然从试图连接到它的服务器的应用程序中获取数据包,现在由你决定是否允许它不连接。

关于java - Android VpnService 如何在打开 Socket 之前处理传入的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32789476/

相关文章:

java - 如何使用方法连接两个对象以返回新对象

java - java中的Filewatcher用于监视Windows文件夹并通知Linux

android - 如何使AutoCompleteTextView适配器找到电话号码?

安卓:支持多屏

c - Epoll 是否可以与 UDP 监听套接字一起使用以实现事件驱动的 UDP 服务器

java - 打印和写入文件时数据不同

java - 如何将我的 9 个 if 语句压缩为一个

android - 在 Android 安装上使用 Qt

c - accept() 返回无效参数

java - Android如何复用Socket?