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

时间:2015-09-25 19:39:01

标签: 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,我可以获取出站数据包并记录它们。然后我打开一个Socket到原始目的地并转发数据包。当响应到来时,它将通过打开的Socket。

所以我的问题是,在我打开Socket到该地址之前,IP地址向我发送了一个数据包后会发生什么?我猜它要么绕过VPN并正常到达,要么完全丢弃(可能是前者?)。任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:2)

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

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