Geowifi πŸ“‘ πŸ’˜ 🌎 Search WiFi geolocation data by BSSID and SSID on different public databases.

Overview

πŸ“‘ πŸ’˜ 🌎 | geowifi

Search WiFi geolocation data by BSSID and SSID on different public databases.

geowifi

πŸ’Ύ Databases:


βœ”οΈ Prerequisites

  • Python3.
  • In order to display emojis on Windows, it is recommended to install the new Windows terminal.
  • ⚠️ In order to use the Wigle service it is necessary to obtain an API and configure the utils/API.yaml file replacing the value of the "wigle_auth" parameter for the "Encoded for use" data provided by Wigle. This is necessary for searching by SSID.

πŸ› οΈ Installation

Use the package manager pip to install requirements.

python3 -m pip install -r requirements.txt

πŸ”Ž Usage

usage: geowifi.py [-h] (-s SSID | -b BSSID) [-j] [-m]


optional arguments:
  -h, --help               Show this help message and exit
  -s SSID, --ssid SSID     Search by SSID
  -b BSSID, --bssid BSSID  Search by BSSID
  -j, --json               Json output
  -m, --map                Map output
  • Search by BSSID:
python3 geowifi.py -b BSSID
  • Search by SSID:
python3 geowifi.py -s SSID

It is possible to export the results in json format using the -j parameter and show the locations on html map using -m.

πŸ—ΊοΈ Map output example

Map output

πŸ’Ύ Json output example

{
   "data":{
      "bssid":"A0:XX:XX:XX:6F:90",
      "vendor":"TP-LINK TECHNOLOGIES CO.,LTD.",
      "mac_type":"MA-L",
      "wigle":{
         "lat":00.000908922099,
         "lon":00.000945220028
      },
      "apple":{
         "lat":"not_found",
         "lon":"not_found"
      },
      "openwifi":{
         "lat":00.000808900099,
         "lon":00.000845500028
      },
      "milnikov":{
         "lat":"not_found",
         "lon":"not_found"
      }
   }
}

πŸ“’ Mentions

  • This project uses some of the research and code used at iSniff-GPS.
  • Thanks to Micah Hoffman for his attention and answers to my questions.
  • Thanks to kennbro for lending me his scrupulous eyes to give me feedback.
You might also like...
DataShare - Simple library for data sharing between scripts and public functions calling

DataShare - Simple library for data sharing between scripts and public functions calling. Installation. Install code, Delete LICENSE, README, readme.t

Public HTTPS access to Home Assistant with Dataplicity service
Public HTTPS access to Home Assistant with Dataplicity service

Custom component for public HTTPS access to Home Assistant with Dataplicity service. Should work on any Linux PC or ARM, not only Raspberry as Dataplicity service said. Don't work on Windows.

Ip-Seeker - See Details With Public Ip && Find Web Ip Addresses
Ip-Seeker - See Details With Public Ip && Find Web Ip Addresses

IP SEEKER See Details With Public Ip && Find Web Ip Addresses Tool By Heshan

Fast and configurable script to get and check free HTTP, SOCKS4 and SOCKS5 proxy lists from different sources and save them to files

Fast and configurable script to get and check free HTTP, SOCKS4 and SOCKS5 proxy lists from different sources and save them to files. It can also get geolocation for each proxy and check if proxies are anonymous.

Tool for quickly gathering information from Shodan.io about the number of IPs which satisfy large number of different queries

TriOp Tool for quickly gathering information from Shodan.io about the number of IPs which satisfy large number of different queries For furt

Python Program to connect to different VPN servers autoatically using Windscribe VPN.

AutomateVPN What is VPN ? VPN stands for Virtual Private Network , it is a technology that creates a safe and encrypted connectionover a less secure n

Multi-path load balancing is a method used by most of the real-time network to split the packets into different paths rather than transferring it through a single path
Multi-path load balancing is a method used by most of the real-time network to split the packets into different paths rather than transferring it through a single path

Multipath-Load-Balancing Method of managing incoming traffic by distributing and sharing load fairly among multiple routes from source to destination

Search ports in multiples hosts

Search Port ✨ Multiples Searchs ✨ Create list hosts Create list targets Start Require Python 3.10.0+. python main.py Struture Function Directory load_

An advanced real time threat intelligence framework to identify threats and malicious web traffic on the basis of IP reputation and historical data.
An advanced real time threat intelligence framework to identify threats and malicious web traffic on the basis of IP reputation and historical data.

ARTIF is a new advanced real time threat intelligence framework built that adds another abstraction layer on the top of MISP to identify threats and malicious web traffic on the basis of IP reputation and historical data. It also performs automatic enrichment and threat scoring by collecting, processing and correlating observables based on different factors.

Comments
  • Cant install with python 3.9

    Cant install with python 3.9

    Hi, i just tried to install the software and i am getting this output:

    > python3 -m pip install -r requirements.txt Exception: Traceback (most recent call last): File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/basecommand.py", line 209, in main status = self.run(options, args) File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/commands/install.py", line 249, in run with self._build_session(options) as session: File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/basecommand.py", line 66, in _build_session session = PipSession( File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/download.py", line 321, in __init__ self.headers["User-Agent"] = user_agent() File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/download.py", line 93, in user_agent zip(["name", "version", "id"], platform.linux_distribution()), AttributeError: module 'platform' has no attribute 'linux_distribution' Traceback (most recent call last): File "/home/kali/anaconda3/lib/python3.9/runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "/home/kali/anaconda3/lib/python3.9/runpy.py", line 87, in _run_code exec(code, run_globals) File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/__main__.py", line 19, in <module> sys.exit(pip.main()) File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/__init__.py", line 217, in main return command.main(cmd_args) File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/basecommand.py", line 242, in main with self._build_session( File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/basecommand.py", line 66, in _build_session session = PipSession( File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/download.py", line 321, in __init__ self.headers["User-Agent"] = user_agent() File "/home/kali/anaconda3/lib/python3.9/site-packages/pip/download.py", line 93, in user_agent zip(["name", "version", "id"], platform.linux_distribution()), AttributeError: module 'platform' has no attribute 'linux_distribution'

    python --version Python 3.9.12

    opened by alonsoir 1
  • Bump protobuf from 3.19.0 to 3.19.5

    Bump protobuf from 3.19.0 to 3.19.5

    Bumps protobuf from 3.19.0 to 3.19.5.

    Release notes

    Sourced from protobuf's releases.

    Protocol Buffers v3.19.5

    C++

    Protocol Buffers v3.19.4

    Python

    • Make libprotobuf symbols local on OSX to fix issue #9395 (#9435)

    Ruby

    • Fixed a data loss bug that could occur when the number of optional fields in a message is an exact multiple of 32. (#9440).

    PHP

    • Fixed a data loss bug that could occur when the number of optional fields in a message is an exact multiple of 32. (#9440).

    Protocol Buffers v3.19.3

    Python

    • Fix missing Windows wheel for Python 3.10 on PyPI

    Protocol Buffers v3.19.2

    Java

    Protocol Buffers v3.19.1

    Bazel

    • Ensure that release archives contain everything needed for Bazel (#9131)
    • Align dependency handling with Bazel best practices (#9165)

    JavaScript

    • Fix ReferenceError: window is not defined when getting the global object (#9156)

    Ruby

    • Fix memory leak in MessageClass.encode (#9150)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Error on latest docker python image

    Error on latest docker python image

    $docker run -it python bash $git clone https://github.com/GONZOsint/geowifi.git && cd geowifi $ python3 -m pip install -r requirements.txt

    Successfully installed MarkupSafe-2.1.1 beautifulsoup4-4.11.1 branca-0.5.0 cachetools-5.2.0 certifi-2022.6.15 charset-normalizer-2.1.1 commonmark-0.9.1 folium-0.12.1.post1 google-3.0.0 google-api-core-2.8.2 google-api-python-client-2.58.0 google-auth-2.11.0 google-auth-httplib2-0.1.0 googleapis-common-protos-1.56.4 httplib2-0.20.4 idna-3.3 jinja2-3.1.2 numpy-1.23.2 protobuf-4.21.5 pyasn1-0.4.8 pyasn1-modules-0.2.8 pygments-2.13.0 pyparsing-3.0.9 pyyaml-6.0 requests-2.28.1 rich-12.5.1 rsa-4.9 six-1.16.0 soupsieve-2.3.2.post1 uritemplate-4.1.1 urllib3-1.26.12

    $ python3 ./geowifi.py

    Traceback (most recent call last): File "/app/geowifi/./geowifi.py", line 8, in from utils import searcher, mapper, vendorcheck File "/app/geowifi/utils/searcher.py", line 8, in from helpers import BSSIDApple_pb2 File "/app/geowifi/helpers/BSSIDApple_pb2.py", line 31, in _descriptor.FieldDescriptor( File "/app/geowifi-env/lib/python3.10/site-packages/google/protobuf/descriptor.py", line 560, in new _message.Message._CheckCalledFromGeneratedFile() TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are:

    1. Downgrade the protobuf package to 3.20.x or lower.
    2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

    More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates

    opened by versus 0
  • Create tags / releases for Debian packaging friendly

    Create tags / releases for Debian packaging friendly

    Hello! I'm going to package your tool for Parrot OS. It would be great if you can create release / tag versions so I can update upstream version automatically. Something like 0.1.0 or if you want to use date, it should be like 01.02.2022. P/s: According to #1, does this tool support checking API key that is saved in $HOME? IMO it should be easier for users using this tool if the configurations are saved at $HOME/.config/

    opened by dmknght 0
Owner
GOΞ ZO
GOΞ ZO
This script aims to make the dynamic public ip of your local server, public.

EZ DDNS CLOUDFLARE This script aims to make the dynamic ip of your local server, public. It does this by regularly updating cloudflare's dns record. B

null 3 Feb 13, 2022
The module that allows the collection of data sampling, which is transmitted with WebSocket via WIFI or serial port for CSV file.

The module that allows the collection of data sampling, which is transmitted with WebSocket via WIFI or serial port for CSV file.

Nelson Wenner 2 Apr 1, 2022
This application aims to read all wifi passwords and visualizes the complexity in graph formation by taking into account several criteria and help you generate new random passwords.

This application aims to read all wifi passwords and visualizes the complexity in graph formation by taking into account several criteria and help you generate new random passwords.

Njomza Rexhepi 0 May 29, 2022
Linux SBC featuring two wifi radios, masquerading as a USB charger.

The WiFiWart is an open source WiFi penetration device masquerading as a regular wall charger. It features a 1.2Ghz Cortex A7 MPU with two WiFi chips onboard.

Walker 151 Dec 26, 2022
Wifi-Jamming is a simple, yet highly effective method of causing a DoS on a wireless implemented using python pyqt5.

pyqt5-linux-wifi-jamming-tool Linux-Wifi-Jamming is a simple GUI tool, yet highly effective method of causing a DoS on a wireless implemented using py

lafesa 8 Dec 5, 2022
PoC code for stealing the WiFi password of a network with a Lovebox IOT device connected

LoveBoxer PoC code for stealing the WiFi password of a network with a Lovebox IOT device connected. This PoC was is what I used in this blogpost Usage

Graham Helton 10 May 24, 2022
Python module to interface with Tuya WiFi smart devices

TinyTuya Python module to interface with Tuya WiFi smart devices Description This python module controls and monitors Tuya compatible WiFi Smart Devic

Jason Cox 365 Dec 26, 2022
A simple python application for generating a WiFi QR code for ease of connection

A simple python application for generating a WiFi QR code Initialize the class by providing QR code values WiFi_QR_Code(self, error_correction: int =

Ivan 2 Aug 1, 2022
Wifi-jammer - Continuously perform deauthentication attacks on all detectable stations

wifi-jammer Continuously perform deauthentication attacks on all detectable stat

Leonardo de Araujo 14 Nov 3, 2022
Connects to databases or sftp server based on configured environmental variables.

Myconnections Connects to Oracle databases or sftp servers depending on configured environmental variables. VERY IMPORTANT: VPN must exist. Installati

null 0 Jan 2, 2022