如何使用 JavaScript 检测我的计算机所连接的网络名称?

问题描述 投票:0回答:2

我想编写一些 JavaScript 来检测/读取我所连接的网络的名称;例如,当我在具有不同 SSID 的两个不同无线网络之间移动时。 最好是 for 循环或 case/switch,以便根据网络的名称,我能够相应地重定向我的浏览器。

谢谢你。

javascript network-programming browser http-redirect
2个回答
3
投票

您的问题的评论是正确的。 JavaScript 代码与任何其他代码一样,受到其运行环境的约束。有两个可能的答案...

最可能的答案是您正在尝试在浏览器中执行所描述的逻辑。如果是这种情况,那么您就依赖于浏览器为您提供的环境。据我所知,没有浏览器可以让您访问网络适配器等机器资源。这将是浏览器中的安全漏洞。因此,您无法通过浏览器中运行的 JavaScript 确定 SSID。您可以提出的更好的问题可能是“如何根据您当前连接的无线网络将流量重定向到另一台服务器”...

另一个答案是您在独立解释器中运行 javascript 代码。如果该解释器允许您访问网络资源,那么您就可以确定 SSID...之后您可以使用主机文件来重定向网络流量。但是,我希望这不是您想要做的。


0
投票

不幸的是,出于安全和隐私考虑,在网络浏览器中运行的 JavaScript 无法直接访问您的计算机所连接的 WiFi 网络 (SSID) 的名称。浏览器旨在将 Web 应用程序与此类敏感的系统级信息隔离。

但是,如果您正在开发桌面应用程序或可以控制系统环境,则可以使用其他技术或工具来实现此目的。以下是您可以根据您的环境进行操作的方法:


1. 使用 Node.js(在浏览器之外)

Node.js 允许您运行服务器端 JavaScript 并与操作系统交互。您可以使用像

node-wifi
这样的软件包来获取WiFi网络详细信息。

示例:

const wifi = require('node-wifi');

// Initialize wifi module
wifi.init({
  iface: null // Use default network interface
});

// Get the current WiFi connection
wifi.getCurrentConnections((err, currentConnections) => {
  if (err) {
    console.error(err);
  } else {
    console.log('Connected to:', currentConnections[0].ssid); // SSID of the connected network
  }
});

2. 通过 JavaScript 使用 PowerShell/命令行

如果您正在构建桌面应用程序(例如,使用 Electron),您可以执行系统命令来检索网络信息。

命令示例:

  • 在 Windows 上:

    netsh wlan show interfaces
    

    这将返回有关当前连接的 WiFi 网络的详细信息,包括 SSID。

  • 在 Linux/Mac 上:

    iwgetid -r
    

    此命令获取已连接网络的 SSID。

与 JavaScript 集成:

您可以在 Node.js 中使用

child_process
来执行这些命令并获取输出。

const { exec } = require('child_process');

exec('netsh wlan show interfaces', (error, stdout, stderr) => {
  if (error) {
    console.error(`Error: ${error.message}`);
    return;
  }
  if (stderr) {
    console.error(`Stderr: ${stderr}`);
    return;
  }
  console.log(`Network Details: ${stdout}`);
});

3. 使用网络扩展

如果您正在构建 浏览器扩展,您可以使用浏览器特定的 API 来获取其他系统信息:

  • Chrome 扩展:使用
    chrome.networking.onc
    API,但它有限制并且可能需要权限。
  • 电子应用程序:这些允许更好的系统访问。

4. 使用特定于平台的API

您可以使用本机编程语言或 API 来检索网络名称并将其与 JavaScript 集成:

  • Windows:在 UWP 应用程序中使用 PowerShell 命令或
    Windows.Networking.Connectivity
    命名空间。
  • Linux/Mac:使用
    iwconfig
    nmcli
    等 shell 命令。

为什么不能直接在浏览器中用 JavaScript 完成此操作?

  • 安全:允许网页访问 WiFi 网络的名称可能会启用跟踪并损害用户隐私。
  • 沙盒:浏览器将 Web 应用程序与敏感的操作系统级详细信息隔离以确保安全。

基于浏览器的应用程序的替代方法:

如果您正在构建基于 Web 的应用程序,请考虑向用户询问网络信息或要求他们运行配套桌面应用程序(使用 Node.js、Python 等构建)以将所需的详细信息发送到您的 Web应用程序。

如果您需要任何特定方法的帮助,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.