【问题标题】:How does Android VpnService handle incoming packets before Socket is opened?Android VpnService 在打开 Socket 之前如何处理传入的数据包?
【发布时间】:2015-12-23 17:12:15
【问题描述】:

我正在尝试使用 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。

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

【问题讨论】:

    标签: java android sockets network-programming vpn


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2010-09-11
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多