java - 使用 netsh 从 Java 访问 Wi-Fi 网络接口(interface)详细信息

标签 java windows network-programming wifi netsh

我正在windows平台上开发一个java程序。我想访问 Wi-Fi 接口(interface)详细信息,例如 SSID、IP、子网、启用或未启用、连接或未连接等。目前我正在尝试使用 netsh、ipconfig 命令。例如,这是我如何获取连接的 SSID。这种方式好吗?有没有更好更简单的方法?提前致谢。

此代码适用于所有 Windows 版本,没有任何问题吗?

String ssid;
ProcessBuilder builder = new ProcessBuilder(
        "cmd.exe", "/c", "netsh wlan show interfaces");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
    line = r.readLine();
    if (line.contains("SSID")){
        ssid = line.split("\\s+")[3];
        System.out.println(ssid);
        return ssid;
    }
}

最佳答案

Windows 操作系统之间的 NetSh.exe 应用程序/命令存在差异。

有关 NetSh 的 Microsoft 命令行引用指出“Windows Server® 2003、Windows Server® 2008 和 Windows Server® 2008 R2 上的 netsh 命令之间存在功能差异:”

这意味着 XP、Vista 和 Windows 7 中存在差异。但是,仅仅因为存在更改并不意味着您不能尝试测试要在应用程序中使用的少数命令。我这样说是因为 NetSh.exe 具有非常多的功能,其中包含许多跨越多种网络技术的子命令。

为了测试操作系统之间的差异,您可以使用列出多个操作系统上的 NetSh.exe 帮助菜单的脚本,或比较 Microsoft 网站上的示例命令(位于下面的链接)。

RobVanderwoude 有一个脚本显示 NetSh 的所有子命令。如果您进一步使用脚本,您可以列出所有子命令示例并比较操作系统之间的结果。

不过,您仍然必须在每个操作系统上手动测试该命令,或者向您信任的人确认某个命令在某个操作系统上有效。

NetSh.exe CLI 引用:https://technet.microsoft.com/en-us/library/ee404790.aspx

NetSh 帮助脚本:http://www.robvanderwoude.com/netsh.php

关于java - 使用 netsh 从 Java 访问 Wi-Fi 网络接口(interface)详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33579815/

相关文章:

java - 为什么阻塞而不是循环?

java - 为什么/如何返回 "locally instantiated array"在 Java 中工作?

Java - 通过哈希比较两个集合的最佳方法(通过==)

windows - 从传递给批处理文件的参数中删除封闭的双引号

java - 使用 Java 基于 HttpConnection 检索本地 IP 地址

c - 读取具有特定字节顺序的 libcap 文件

java - 如何更新Java swing背景图?

windows - 如何在不解释变量的情况下打印/回显 PATH 等 Windows 环境变量?

linux-kernel - 有关内核空间中网络接口(interface)的信息

windows - 在 Qt 中禁用进度条动画