您是否知道Google有一个名为“ WiFi Access Point对象”的位置搜索引擎?该功能在文档中进行了详细描述,您可以通过单击here进行检查。
真的很棒,不是吗?让我们进一步探索此功能!
您听说过BSSID吗?该术语也称为基本服务集标识符,听起来可能很复杂,但实际上对于了解您的Wi-Fi路由器的工作方式非常有用。 BSSID就像是对路由器的唯一“名称”,允许您的设备在网络上识别它。
将BSSID视为路由器的MAC地址。它在使您的设备能够快速有效地连接它方面起着至关重要的作用。当您的设备上扫描可用的Wi-Fi网络时,您可以将BSSID视为字母和数字的组合。
为什么这很重要?好吧,在设置或故障排除无线网络上,了解BSSID可能会非常有帮助。它有助于识别您连接到的特定路由器,在调整设置或解决连接问题时,这可能很有用。
因此,下次您遇到BSSID一词时,请记住它是指Wi-Fi路由器的唯一标识符。这是确保家庭或工作场所网络中稳定可靠连接的关键要素。
如果您想查看周围的Wi-Fi路由器的BSSID,我们有一个简单的命令。以下是:
打开终端并键入以下命令:
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -s
重要的是要使用管理员特权运行上述命令,以确保您可以访问必要的信息。出于安全原因,如果您在没有适当权限的情况下运行命令,将不会显示BSSID。
终端输出看起来与此相似:
SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
"confidencial" XX:5f:67:XX:c5:4d -81 8 Y -- RSN(PSK/AES/AES)
"confidencial" 00:31:92:XX:e7:36 -50 9 Y -- RSN(PSK/AES/AES)
"confidencial" cc:06:XX:db:e2:XX -50 4 Y -- RSN(PSK/AES/AES)
"confidencial" a4:XX:a4:ed:XX:7c -47 2 Y BR WPA(PSK/AES,TKIP/TKIP) RSN(PSK/AES,TKIP/TKIP)
"confidencial" cc:06:77:db:e2:84 -66 36,+1 Y -- RSN(PSK/AES/AES)
"confidencial" 00:31:XX:XX:e7:37 -57 48,-1 Y BR RSN(PSK/AES/AES)
"confidencial", fa:XX:ca:86:ca:96 -26 6 Y -- NONE
"confidencial" a4:6d:a4:XX:33:XX -49 36 Y BR WPA(PSK/AES,TKIP/TKIP) RSN(PSK/AES,TKIP/TKIP)
获得所需的Wi-Fi路由器的BSSID后,您可以使用Google API获取准确的地理位置数据。这是使用终端中的简单命令来执行操作的方法:
curl --location --request GET 'https://www.googleapis.com/geolocation/v1/geolocate?key=YourAPIKeyHere' \
--header 'Content-Type: application/json' \
--data '{
"wifiAccessPoints":[
{
"macAddress": "BSSIDOfTheRouterHere"
}
]
}'
在继续之前,重要的是用Google API密钥替换“ Yourapikeyhere”,您可以通过在Google Cloud Platform上创建开发人员帐户来获得。请确保添加正确的键以确保正确访问API。
运行命令时,系统将向Google Geolocation API发送GET请求,并将路由器的BSSID作为参数传递。这允许Google根据路由器的地理位置信息识别路由器的大致位置。
此外,通过检查示例调用的结构,您可以输入多个Wi-Fi MAC地址以及信号强度。这样,API将使用三角剖分技术来提供更准确的位置。
值得注意的是,地理位置API还可以根据单元塔ID找到位置。这意味着即使您未连接到Wi-Fi网络,您也可以获取准确的位置信息。
现在,让我们创建一些代码以使用GO编程语言自动化上述过程。
这是代码:
package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
"os/exec"
"runtime"
"strings"
)
func getWifiMacAddresses() map[string]map[string]string {
var results []byte
var err error
switch runtime.GOOS {
case "darwin":
results, err = exec.Command("/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport", "-s").Output()
case "windows":
results, err = exec.Command("netsh", "wlan", "show", "network").Output()
case "linux":
results, err = exec.Command("iwlist", "scanning").Output()
}
if err != nil {
log.Fatal(err)
}
var macAddr = make(map[string]map[string]string)
lines := strings.Split(strings.TrimSpace(string(results)), "\n")[1:]
for _, line := range lines {
fields := strings.Fields(line)
addr := fields[0]
db := fields[1]
// additional fields if needed
macAddr[addr] = map[string]string{
"signalStrength": db,
}
}
return macAddr
}
func main() {
postjson := make(map[string]interface{})
postjson["wifiAccessPoints"] = []map[string]interface{}{}
hotspots := getWifiMacAddresses()
for addr, info := range hotspots {
signalStrength := info["signalStrength"]
postjson["wifiAccessPoints"] = append(postjson["wifiAccessPoints"].([]map[string]interface{}), map[string]interface{}{
"macAddress": addr,
"signalStrength": signalStrength,
})
}
googleMapsAPIkey := "your_google_maps_api_key"
url := "https://www.googleapis.com/geolocation/v1/geolocate?key=" + googleMapsAPIkey
data, err := json.Marshal(postjson)
if err != nil {
log.Fatal(err)
}
response, err := http.Post(url, "application/json", bytes.NewBuffer(data))
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
var result map[string]interface{}
json.NewDecoder(response.Body).Decode(&result)
fmt.Println(result)
}
结论
在这篇博客文章中,我们探讨了如何使用GO编程语言来自动检索Wi-Fi Mac地址并利用Google Geolocation API。使用已开发的代码,可以获取有关附近Wi-Fi路由器的准确信息并将其发送到API,从而获得大约位置。
我希望这有帮助。直到下一次! (: