以编程方式获取无线接入点列表

4
这是一个普遍的编程问题,尽管我更喜欢使用 Node.js 相关的解决方案。是否有任何 JavaScript 或 .NET API 可以检索无线访问点及其相关数据(SSID、MAC 地址等)?我使用 TamperData 查看了在 Firefox 中共享位置时会发生什么,并得到了此请求 URL: https://maps.googleapis.com/maps/api/browserlocation/json?browser=firefox&sensor=true&wifi=mac:b8-c7-5d-07-6e-cf|ssid:TV2 Network|ss:-58&wifi=mac:00-13-10-8d-a7-32|ssid:LUBIN|ss:-61&wifi=mac:62-4c-fe-9c-08-18|ssid:airportthru|ss:-73&wifi=mac:00-24-93-0c-49-e0|ssid:Custom Gifts Memphis|ss:-87&wifi=mac:98-fc-11-69-35-46|ssid:linksys|ss:-87&wifi=mac:00-0f-cc-6d-ba-ac|ssid:3333|ss:-88&wifi=mac:40-b7-f3-5b-2c-60|ssid:ATT456|ss:-88&wifi=mac:00-c0-02-7d-5f-4e|ssid:iHub_0060350392e0|ss:-89&wifi=mac:00-24-b2-d5-df-9a|ssid:Memphis CPA|ss:-89&wifi=mac:06-02-6f-c3-06-27|ssid:3333|ss:-89&wifi=mac:00-27-0d-55-c3-20|ssid:custard|ss:-90&wifi=mac:a2-a1-15-0d-a8-68|ssid:SETUP|ss:-90&wifi=mac:00-0f-cc-76-5b-2c|ssid:3545 2340|ss:-92&wifi=mac:c0-3f-0e-6e-ac-34|ssid:patricia|ss:-92 执行后,返回一个 JSON 对象,其中包含我要查找的内容:纬度和经度坐标。此示例的对象为: { "accuracy" : 49.0, "location" : { "lat" : 35.06993630, "lng" : -89.88568730 }, "status" : "OK" } 好奇:这里的准确性是如何表示的?我相当确定它不是一个百分比,因为其他列出的访问点更少的请求会返回更高的整数。例如,当删除除第一个列出的 WAP 以外的所有 WAP 时,我得到的准确度为 43000.0

我一直在研究 preyNode 版本如何与类似的 Google 服务进行交互,它遵循了传递无线接入点及其信息列表的相同方式。我试图提取他们的代码中完成此任务的部分,但我甚至无法正确地运行该项目。如果有人有任何信息,我将非常感慨激,因为我有一个想法很棒的项目可以利用这种技术。谢谢!


如果Google API遵循与HTML5 Geolocation API相同的规则,我会怀疑它确实如此,那么准确性是95%置信度下以米为单位的值。 - C Snover
2个回答

5

只能通过Java applet或主机计算机上的应用程序实现此功能。 Chrome和其他浏览器通过在用户计算机上安装应用程序来实现这一点。该应用程序通过Https请求安全地转发数据,并将您的mac id和ssid传递给例如Google。在这里,Google根据最佳猜测回复您的位置。


1
欢迎来到 Stack Overflow!恭喜您在这里的第一天就获得了第一个赏金! - Sergio

1

node_wifi_location npm包从本地机器的无线网卡中检索可用的无线接入点列表,并选择性地将它们传递给Google位置API以检索机器的位置。它依赖于操作系统的wifi命令行实用程序,因为每个平台都有自己的API来访问wifi硬件。没有任何浏览器内的JavaScript API用于检索接入点列表,只有用于检索位置的API(HTML5 geolocation API)。

var wifiLocation = require('wifi_location');

wifiLocation.wifiTowers(function (err, accessPoints) {
    // accessPoints contains an array of access point objects
    // with ssid, mac_address, signal_strength keys 
});

wifiLocation.location(function (err, location) {
    // location contains the location object from the Google Maps API
});

所以谷歌依赖用户使用Chrome作为他们的浏览器。浏览器将数据传递给位置API? - tyler
我不太确定你在问什么。除了运行在带有WiFi卡的机器上的软件,没有其他东西能够获取附近WiFi网络的信息。所以,是的,浏览器会将附近WiFi列表传递给Google服务器,然后通过与Street View车辆(和可能的其他来源)收集的WiFi数据进行交叉检查来确定您的位置。 - C Snover
我正在尝试获取PC可用的SSID...我在Chrome浏览器中四处搜索,但没有找到。我愿意接受任何能够获取这些数据的解决方法。注意:这只需要在我的电脑上工作,不需要纯网络解决方案,因为我认为这是不可能的。 - tyler
这个问题要求使用Node.js解决方案。node_wifi_location是一个Node.js包,可以从系统的wifi接口中检索所有可用的SSID。我不明白你还在寻找什么,但我认为这不是合适的提问地点。 - C Snover
@CSnover,我按照您的指南操作了。它可以工作,但是它列出的是NodeServer周围可用的WiFi列表,而不是客户端周围的WiFi列表。这是真的吗?我在本地进行了测试,服务器和客户端都有相同的WiFi列表。 - Khalil Laleh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接