android vpn pptp 自动切换VPN
来源:互联网 发布:js 组合式继承 编辑:程序博客网 时间:2024/04/30 13:30
因为项目需求,需要自动切换各种IP,本想利用android原生的VPN代码。
只能说各种坑爹,各种反射,结果让人失望。
查看andorid系统的C代码,有个mtpd,有必要了解下。
以下,是在获得ROOT的情况下执行的
下面是部分命令
mtpd wlan0 pptp a.hkgjsq.com 1723 linkname vpn require-mppe-128 usepeerdns lcp-echo-failure 20 lcp-echo-interval 4 mtu 1396 mru 1396 unit 100 nodetach user 'xxxxx' password 'xxxxxxxx' ipparam vpn &
这个命令,因平台而有小异.
再次是设置DNS之类的设置
ip -4 ro flush dev ppp100 |ip ro add 0.0.0.0/1 dev ppp100 |ip ro add 128.0.0.0/1 dev ppp100 |ip ru add from all table vpn |ip ro add default dev ppp100 table vpn |
最后是IP的设置
10.0.32.53
12-02 19:22:49.620: I/(25412): dns before 202.96.134.33 202.96.128.86
12-02 19:22:49.620: I/(25412): incercam sa aflam dns de la pppoe varianta 1
12-02 19:22:49.625: I/(25412): We found DNS using case 1
12-02 19:22:49.625: I/(25412): DNS dnsfound=true
12-02 19:22:49.625: I/(25412): dns found
12-02 19:22:49.625: I/(25412): DNS1 8.8.8.8
12-02 19:22:49.625: I/(25412): DNS2 8.8.4.4
12-02 19:22:49.685: I/(25412): DNS set: iptables -t nat -I OUTPUT -d 202.96.134.33 -p udp --dport 53 -j DNAT --to 8.8.8.8:53
12-02 19:22:49.685: I/(25412): DNS set: iptables -t nat -I OUTPUT -d 202.96.128.86 -p udp --dport 53 -j DNAT --to 8.8.4.4:53
以下是部分核心代码
localStringBuffer2.append("mtu " + this.mtu.toString().trim() + " ");
localStringBuffer2.append("mru " + this.mru.toString().trim() + " ");
localStringBuffer2.append("unit 100 ");
if (this.ipv6enable.booleanValue()) {
localStringBuffer2.append("+ipv6 ");
}
localStringBuffer2.append("nodetach ");
localStringBuffer2.append("user '" + this.username.toString() + "' ");
localStringBuffer2.append("password '" + this.password.toString() + "' ");
localStringBuffer2.append("ipparam vpn ");
String str3 = "mtpd";
this.android_version = Build.VERSION.SDK_INT;
Log.i(TAG,"VpnRoot found device=" + getDeviceName() + " android SDK=" + String.valueOf(this.android_version));
if ((!getDeviceName().startsWith("Samsung SM-N910")) && (!getDeviceName().startsWith("blablalba")) && ((getDeviceName().startsWith("GT-I95")) || (getDeviceName().startsWith("GT-I96")) || (getDeviceName().startsWith("GT-I97")) || (getDeviceName().startsWith("Samsung"))) && (this.android_version >= 19))
{
if (!new File("/system/bin/mtpd2").exists()) {
localStringBuffer1.append("mount -o remount,rw /system \ncp /system/bin/mtpd /system/bin/mtpd2\nmount -o remount,ro /system\n");
str3 = "mtpd2";
}
else {
str3 = "mtpd2";
}
}
String str4 = Build.VERSION.RELEASE;
Log.i(TAG,"VpnRoot : Android OS " + str4);
if ((str4.startsWith("5.")) && (!getDeviceName().startsWith("Samsung")) && (!getDeviceName().startsWith("OnePlus")))
{
StringBuffer localStringBuffer3 = new StringBuffer();
localStringBuffer3.append("mount -o remount,rw /system \nchcon u:object_r:system_file:s0 /system/bin/mtpd \nchcon u:object_r:system_file:s0 /system/bin/pppd \nchcon u:object_r:tun_device:s0 /dev/ppp \nchmod 666 /dev/ppp \nmount -o remount,ro /system\n");
Log.i(TAG, "cmd vpn_connect cmd = " +localStringBuffer3.toString());
runCommand localrunCommand2 = new runCommand(localStringBuffer3, 0);
localrunCommand2.setDaemon(true);
localrunCommand2.start();
try
{
Thread.sleep(1000L);
}
catch (InterruptedException localInterruptedException)
{
localInterruptedException.printStackTrace();
}
}
if (this.android_version <= 10)
{
localStringBuffer1.append(str3 + " pptp ");
localStringBuffer1.append(this.host.toString().trim() + " ");
localStringBuffer1.append(str2.toString().trim() + " '' ");
}
else {
localStringBuffer1.append(str3 + " " + this.inter.toString().trim() + " pptp ");
localStringBuffer1.append(this.host.toString().trim() + " ");
localStringBuffer1.append(str2.toString().trim() + " ");
}
localStringBuffer2.append(" &\n");
localStringBuffer1.append(localStringBuffer2);
if (!(((!str4.equals("L")) && (!str4.startsWith("5."))) || (getDeviceName().startsWith("Samsung")) || (getDeviceName().startsWith("OnePlus")))) {
runCommandAndroidL localrunCommandAndroidL = new runCommandAndroidL(localStringBuffer1, 0);
localrunCommandAndroidL.setDaemon(true);
localrunCommandAndroidL.start();
}
else {
runCommand localrunCommand1 = new runCommand(localStringBuffer1, 0);
localrunCommand1.setDaemon(true);
localrunCommand1.start();
}
- android vpn pptp 自动切换VPN
- pptp vpn
- pptp vpn
- PPTP VPN
- Android 安卓 VPN设置 PPTP教程
- [Android] PPTP VPN客户端拨号操作步骤
- routeros pptp vpn接触
- debian6 安装pptp vpn
- PPTP VPN服务端安装
- VPS and PPTP VPN
- Centos 搭建PPTP VPN
- VPN: centos vps + pptp
- Ubuntu VPN PPTP 配置
- 安装pptp vpn
- PPTP VPN地址记录
- Free PPTP VPN
- linux-vpn(pptp)
- pptp VPN 配置
- 软件构建中的设计
- 自定义返回按钮后,右滑返回功能失效解决方法
- coderforce 482A. Diverse Permutation
- Thread中的异常处理
- git 如何记住用户名和密码
- android vpn pptp 自动切换VPN
- spring中的IOC和AOP
- dictionary实例的解析和强制解析
- Android之封装支付宝支付
- json解析数据 再讲数据转化成json
- CodeForces 412D Giving Awards
- RCP handler配置enableWhen,activeWhen
- 九.SQL server 事务、锁与游标问题
- iOS 动画