介绍:
在Android设备上,我们经常需要检测当前网络连接的类型以及是否存在代理。本教程将向您展示如何使用AutoJS编写一个脚本来检测网络状态、代理和连接类型。
步骤1:
准备工作 首先,确保您已经安装了AutoJS应用并成功启动。然后创建一个新的脚本文件,并将以下代码复制到文件中。
[content_hide]
/**
* 检测系统是否有代理
*/
function isVPN() {
try {
var niList = java.net.NetworkInterface.getNetworkInterfaces();
if (niList) {
var VPN;
var arry = java.util.Collections.list(niList).toArray();
for (ary = 0; ary < arry.length; ary++) {
if (
!arry[ary].isUp() ||
arry[ary].getInterfaceAddresses().size() == 0
) {
continue;
}
if (
arry[ary].getName().search("tun0") !== -1 ||
arry[ary].getName().search("ppp0") !== -1
) {
VPN = true;
return true;
} else {
VPN = false;
}
}
return VPN;
}
} catch (error) {}
}
/**
* 检测wifi是否有代理
*/
function isWifiProxy(context) {
importClass(android.os.Build);
importClass(android.text.TextUtils);
IS_ICS_OR_LATER =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
let proxyAddress;
let proxyPort;
if (IS_ICS_OR_LATER) {
proxyAddress = java.lang.System.getProperty("http.proxyHost");
portStr = java.lang.System.getProperty("http.proxyPort");
proxyPort = java.lang.Integer.parseInt(portStr != null ? portStr : "-1");
} else {
proxyAddress = android.net.Proxy.getHost(context);
proxyPort = android.net.Proxy.getPort(context);
}
return !TextUtils.isEmpty(proxyAddress) && proxyPort != -1;
}
let intentFilter = new android.content.IntentFilter();
intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
let mReceiver = new BroadcastReceiver({
onReceive: function (context, intent) {
if (
intent.getAction() === android.net.ConnectivityManager.CONNECTIVITY_ACTION
) {
let connectivityManager = context.getSystemService(
android.content.Context.CONNECTIVITY_SERVICE
);
let network = connectivityManager.getActiveNetwork();
if (network != null) {
let networkCapabilities =
connectivityManager.getNetworkCapabilities(network);
if (networkCapabilities != null) {
if (
networkCapabilities.hasTransport(
android.net.NetworkCapabilities.TRANSPORT_WIFI
)
) {
// 当前连接的是 Wi-Fi 网络
toastLog("NetworkChangeReceiver: " + "当前连接的是 Wi-Fi 网络");
} else if (
networkCapabilities.hasTransport(
android.net.NetworkCapabilities.TRANSPORT_CELLULAR
)
) {
// 当前连接的是移动数据网络
toastLog("NetworkChangeReceiver: " + "当前连接的是移动数据网络");
}
if (isVPN() || isWifiProxy(context)) {
toastLog("请勿尝试进行抓包或者关闭VPN连接重试!");
// exit();
// engines.stopAll();
}
}
} else {
// 网络断开连接
toastLog("NetworkChangeReceiver: " + "网络已断开连接");
}
}
},
});
/**
* 注册网络变化广播接收器。
*/
mReceiver && context.registerReceiver(mReceiver, intentFilter);
events.on("exit", () => {
/**
* 取消注册网络变化广播接收器。
*/
mReceiver && context.unregisterReceiver(mReceiver);
});
setInterval(() => {}, 1000);
[/content_hide]
步骤2:
理解代码 上述代码定义了两个函数:isVPN()
和isWifiProxy(context)
,用于检测系统是否存在代理。接下来,我们创建了一个广播接收器 mReceiver
,它用于监听网络状态的变化。
步骤3:
注册广播接收器 在上述代码中,我们使用 context.registerReceiver(mReceiver, intentFilter)
注册了广播接收器。这将使脚本能够监听网络连接状态的变化。
步骤4:
处理网络变化事件 在 onReceive()
函数中,我们检查网络连接的类型(Wi-Fi或移动数据网络)以及是否存在代理。如果检测到代理存在,我们会显示一条提示信息。
步骤5:
取消注册广播接收器 为了避免内存泄漏,我们在脚本结束时使用 context.unregisterReceiver(mReceiver)
取消注册广播接收器。
步骤6:
运行脚本 保存脚本文件并点击运行按钮。脚本将开始监听网络连接状态的变化,并在检测到代理存在时显示相应的提示信息。
结论:
通过这个简单的AutoJS脚本,我们可以实现对网络连接状态和代理的检测。您可以根据自己的需求进一步扩展此脚本,例如添加通知或执行其他操作。
- 最新
- 最热
只看作者