Articles of vpn

保护VpnService中的套接字

我正在探索Android的VpnService的function。 目前,我通过在用户空间重建IP堆栈构建了一个非常基本的请求转发器:我从VpnService的输入流中读取IP数据包,解析它们,对于我不想转发的连接,我尝试重新创建那些VPN连接外部的套接字连接。 我已经明白最后一点是由VpnService.protect()促成的,并尝试按如下方式实现它: Socket socket = new Socket(); vpnService.protect(socket); socket.connect(new InetSocketAddress( header.getDestinationAddress(), // From my IP datagram header body.getDestinationPort())); // From the TCP datagram header 不幸的是,这种方法导致环回VPN接口。 虽然上面的代码只是阻塞并最终超时,但我通过从一个单独的线程调用Socket.connect(InetSocketAddress)来观察环回; 连接直接返回到我的VpnService的输入流,并重复该过程。 不用说,这会导致循环。 我觉得这样做的原因是在创建套接字时(以及随后调用VpnService.protect(Socket) ),我还没有设置目标IP和端口。 这似乎确实如此,因为通过在我的VpnService实现中重写VpnService.protect(Socket)和VpnService.protect(int)并在两种情况下调用supers都会返回false。 如何正确保护套接字连接?

Android VpnService类及其构建器类

我有两个关于VpnService.Builder类的问题。 假设我知道应用程序与其服务器www.somedomain.com通信,我知道服务器的IP地址是210.32.204.165 。 关于addAddress(String address,int prefixLength)函数。 在文档中,它说这个function“将网络地址添加到VPN接口”,这是什么意思? 是否意味着流量到达该地址(应用程序的服务器IP地址)将通过VPN或来自此地址的流量(设备IP?)将通过VPN? 有一个函数addAllowedApplication(String packageName) ,它指定哪个应用程序的流量通过VPN隧道。 有没有办法或function强制所有流量发送到服务器www.somedomain.com通过VPN隧道?

在Android中以编程方式配置PPTP / L2TP VPN

我已经阅读了关于VpnService和VpnService.Builder但是无法获得将vpntypes设置为PPTP或L2TP的任何方法,即使我没有得到任何可以设置用户/密码的方法。 注意: There are many questions in SO I read them but didn’t find solution. I looked into ToyVpn application but this there are only 3 parameters we set in this application. There are many questions in SO I read them but didn’t find solution. I looked into ToyVpn application but this there are only […]

在Genymotion Android中连接到VPN

我正在尝试在Genymotion虚拟设备中配置和连接到VPN,我可以在虚拟设备中配置VPN连接但无法连接,不显示错误。 我在我的PC和Real Android设备中使用了相同的设置,它在设备和PC上运行良好。 我认为它与VirtualBox的问题,但我不知道如何解决它 系统细节: 操作系统:Linux Mint 32Bit Genymotion版本:2.1.1 虚拟设备:Galaxy S4 – 4.3 – API18 – 1080×1920

Android模拟器的VPN连接失败

我是Android开发的新手。 我正在尝试从我的Android应用加入现有的VPN。 我想在我的应用程序中集成VPN; 我的应用程序然后应该查询远程数据库。 我得到了一些代码并试图用它来创建VPN。 它模拟Android手机上的内置VPN管理器。 代码编译并启动管理器但是当我尝试在所有配置之后连接时,与VPN的连接不成功。 该协议是PPTP。 VPN存在并已经过测试。 我尝试从具有相同设置的Android手机连接,并且它成功了。 我想也许我以错误的方式传递参数。 我已经为下面的vpn部分添加了代码。 url不是实际的,但格式相同。 任何帮助,以确定我做错了什么将不胜感激。 此外,如果有一种方法,我可以直接从我的应用程序调用VPN管理器。 非常感谢您的帮助, final Button button1 = (Button)findViewById(R.id.button1); final Button button2 = (Button)findViewById(R.id.button2); final Button button3 = (Button)findViewById(R.id.button3); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(“android.net.vpn.SETTINGS”)); } }); button2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { URL url = null; […]

Android:使用VPNService API在Android 4.0中使用自己的VPN连接的示例代码

我是android的新手,我正在尝试以编程方式建立并连接到我们自己的vpn (不是默认的vpn提供者,即PPTP , L2TP等,它存在于Android Setting -> Wireless and Networks )。 我的情况是,我有按钮,当我点击按钮时,我需要配置我自己的vpn并且链接(比如www.google.com)应该通过我配置的VPN 。 有没有示例代码?

在Android中捕获网络数据包?

我正在开发一个项目,我需要捕获传入/传出的数据包并将它们存储在pcap文件中。 Android为此目的提供了VpnService ,这是在API级别14中添加的。尽管在SO上似乎有很多关于此的问题,但令人惊讶的是它的工作示例非常少。 我尝试使用添加在样本中的ToyVpn,但我无法使其工作。 然后我发现了这个例子。 VpnService示例 该示例总结了以下步骤中的捕获。 创建一个TUN界面(我仍然不确定TUN是什么,但在互联网上冲浪说它是在设备上模拟网络层)。 通过TUN获取传入数据包和传出数据包的文件描述符。 将这些数据包转发到实际的服务器。 (不确定这是什么服务器?每个传出的数据包都有一个requestUrl ,所以服务器在这里意味着将请求委托给requestUrl服务器 。或者服务器意味着在AWS上的某个地方创建自己的服务器并重定向那里的所有流量,反过来将流量重定向到实际目的地)。 从服务器获取响应。 在TUN的帮助下,再次将此响应传递给应用程序的预期组件。 我使用下面的代码创建了一个TUN。 我给出了上面提到的教程中给出的地址。 不确定,是否有正确的值。 以及如何确定这个地址。 Builder builder = new Builder(); ParcelFileDescriptor mInterface = builder.setSession(“MyVPNService”) .addAddress(“192.168.0.1”, 24) .addDnsServer(“8.8.8.8”) .addRoute(“0.0.0.0”, 0).establish(); 接下来,我获得了文件描述符,并打开了隧道。 FileInputStream in = new FileInputStream( mInterface.getFileDescriptor()); DatagramChannel tunnel = DatagramChannel.open(); // I have created a EC2 instance on AWS, and gave […]

在VpnService.Builder中传递用户名和密码的方法

我正在开发我想要使用VPN网络的应用程序。 要在设备中创建VPN网络,我们需要从设备的(设置 – 无线和网络 – VPN设置)菜单进行配置。 我想通过带有硬编码信息的代码进行这么多设置。 从API级别4.0开始,android提供API来处理VPN服务 。 要知道这个方法的实现,我使用了Android ToyVPN的Sample项目。 但在这许多方法中,我没有find任何传递用户名和密码的方法。 我必须连接VPN网络的信息是。 VPN服务器名称 用户名 密码 使用这三个信息,如果我从设备手动配置,我就成功连接到VPN网络。 但我想以编程方式执行此操作。 这是用于连接VPN网络的类文件。 ToyVpnClient.java和ToyVpnService.java 。 除此示例应用程序外,还会在设备中崩溃。 任何帮助将不胜感激。

以编程方式在Android上创建VPN

我知道之前已经提出这个问题了,但大多数都是3到4年前没有明确的答案。我想知道这是否已经存在于2015年。

现有VPN应用程序如何在Android 2.0 – 2.3中创建新配置文件?

经过对StackOverflow的大量搜索后,它似乎只是在设备之前创建了一个4.0之前的VPN配置文件 我的问题是以下应用程序如何在没有root的情况下完成它? http://www.featvpn.com/ https://play.google.com/store/apps/details?id=com.expressvpn.vpn&hl=en 更新1 似乎私有API是4.0之前的方式。 不幸的是,没有太多资源可以开始使用。 有谁知道私人api是否还需要root设备? 更新2 看来你可以使用改进的Android.jar或使用reflection来做到这一点。 L2TP / IPSEC仍然需要root设备。 PPTP似乎没有。 如何在Android上使用内部API 更新3 请注意,这取自各种来源。 似乎root是必需的,因为VpnService启动racoon,然后以系统用户身份运行,并从KeyStore中检索PSK。 因此,其他应用程序创建的KeyStore条目对racoon不可见。 (在linux环境中,racoon是一个协助IPSEC相关密钥协商的安全流程 – IKE)。 这是有道理的,然而,仍有一些应用程序可以在没有root的情况下实现L2TP / IPSEC。 更新4 XinkVPN,源代码入门。 仍然不允许用户创建L2TP配置文件而无需用户生成key_store并重新编译。 不是很友好,但开始很棒。 https://github.com/xinthink/xinkvpn http://code.google.com/p/xinkvpn/