了解如何使用Google使用Wi-Fi路由器来定位您的房屋!
#安全 #go #googlecloud #google

Wifi Google

您是否知道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,从而获得大约位置。

我希望这有帮助。直到下一次! (: