DEV Community

Higor Diego
Higor Diego

Posted on

4

Descubra como usar o Google para localizar sua casa utilizando apenas o seu roteador Wi-Fi!

Wifi Google

Você sabia que o Google possui um mecanismo de busca de localização chamado "Wifi access point object"? Essa funcionalidade é descrita em detalhes na documentação, que você pode conferir clicando aqui.

É realmente incrível, não é mesmo? Vamos explorar mais esse recurso!

Você já ouviu falar do BSSID? Também conhecido como Basic Service Set Identifier, esse termo pode parecer complicado, mas na verdade é bastante útil para entender como funciona o seu roteador Wi-Fi. O BSSID é como um "nome" exclusivo dado ao roteador, permitindo que seus dispositivos o identifiquem na rede.

Imagine que o BSSID é como um endereço MAC para o seu roteador. Ele desempenha um papel fundamental ao permitir que seus dispositivos se conectem a ele de forma rápida e eficiente. Ao escanear as redes Wi-Fi disponíveis em seu dispositivo, você pode visualizar o BSSID como uma combinação de letras e números.

Por que isso é importante? Bem, compreender o BSSID pode ser extremamente útil ao configurar ou solucionar problemas em sua rede sem fio. Ele ajuda a identificar o roteador específico ao qual você está se conectando, o que pode ser útil ao ajustar configurações ou solucionar problemas de conexão.

Portanto, da próxima vez que você se deparar com o termo BSSID, lembre-se de que ele se refere ao identificador exclusivo do seu roteador Wi-Fi. É um elemento-chave para garantir uma conexão estável e confiável em sua rede doméstica ou local de trabalho.

Se você deseja visualizar os BSSID dos roteadores Wi-Fi ao seu redor, temos um comando simples para você. Acompanhe:

Abra o terminal e digite o seguinte comando:

sudo /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -s
Enter fullscreen mode Exit fullscreen mode

É importante executar o comando acima com permissões de administrador para garantir que você tenha acesso às informações necessárias. Por motivos de segurança, o BSSID não será exibido se você executar o comando sem as permissões adequadas.

O output do terminal será parecido com esse:

            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) 
Enter fullscreen mode Exit fullscreen mode

Depois de obter o BSSID do roteador Wi-Fi desejado, você pode utilizar a API do Google para obter dados de geolocalização precisa. Veja como fazer isso usando um comando simples no terminal:

curl --location --request GET 'https://www.googleapis.com/geolocation/v1/geolocate?key=SuaChaveAPIAqui' \
--header 'Content-Type: application/json' \
--data '{
    "wifiAccessPoints":[ 
        {
            "macAddress": "BSSIDDoRoteadorAqui" 
        }
    ]
}'
Enter fullscreen mode Exit fullscreen mode

Antes de prosseguir, é importante substituir "SuaChaveAPIAqui" pela chave de API do Google que você pode obter ao criar uma conta de desenvolvedor no Google Cloud Platform. Certifique-se de adicionar a chave correta para garantir o acesso adequado à API.

Ao executar o comando, o sistema enviará uma solicitação GET para a API do Google Geolocation, passando o BSSID do roteador como parâmetro. Isso permitirá que o Google identifique a localização aproximada do roteador com base em suas informações de geolocalização.

Além disso, ao analisar a estrutura dos exemplos de chamadas, você pode inserir vários endereços MAC Wi-Fi juntamente com a intensidade do sinal. Dessa forma, a API utilizará técnicas de triangulação para fornecer uma localização ainda mais precisa.

É interessante destacar que a API de geolocalização também pode encontrar locais com base em IDs de torres de celular. Isso significa que você pode obter informações precisas de localização mesmo quando não está conectado a uma rede Wi-Fi.

Agora vamos criar um código para automatizar esse processo acima usando a linguagem golang.

Segue o código abaixo:

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":
esults, 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)
}

Enter fullscreen mode Exit fullscreen mode

Conclusão

Nesta postagem, exploramos como utilizar a linguagem de programação Go para automatizar a obtenção de endereços MAC Wi-Fi e aproveitar a API de geolocalização do Google. Com o código desenvolvido, é possível obter informações precisas sobre roteadores Wi-Fi próximos e enviá-las para a API, obtendo assim uma localização aproximada.

Espero ter ajudado, até a próxima ( :

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay