AutoJS 检测网络代理和连接类型的教程

介绍:

在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脚本,我们可以实现对网络连接状态和代理的检测。您可以根据自己的需求进一步扩展此脚本,例如添加通知或执行其他操作。


希望这篇教程对您有所帮助!如果您有任何问题,请随时向我提问。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共8条

请登录后发表评论