πŸš€ Project Website & GitHub Repo

Android Platform Language Language License Status Ask DeepWiki

πŸ“š Documentation Β· πŸš€ Database Combiner Guide Β· πŸ—ΊοΈ Map Viewer Guide Β· πŸ“ Project Structure Β· πŸ“‚ Detailed Structure Β· οΏ½ Changelog Β· 🀝 Contributing Β· πŸ”’ Security Β· πŸ“œ Code of Conduct

🌐 Project Website

GeoGrabber Logo

πŸ“‘ WiFi & Bluetooth GeoGrabber

Professional Geolocation & Signal Mapping
Scan, Map, and Analyze WiFi Networks & Bluetooth Devices with GPS Precision
Current Version: v1.0.4

Project Status Notice

This is a very early stage of the program. While it is already functional, it is based on an older project that I have recently resumed. Therefore, extensive refactoring and further development are still required. Expect ongoing changes and improvements as work continues.

⚠️ Python Integration Notice (v1.0.4)

The two Python tools are not yet fully compatible with the new encrypted databases.
Additional development is required to implement full SQLCipher support and key handling.

➑️ If you need to work without encryption, please use version 1.0.2.

🀝 Contribute to GeoGrabber!

We welcome your ideas, bug reports, and feature requests!

Contribute Badge

πŸ“– Table of Contents

🎯 Overview

WiFi & Bluetooth GeoGrabber is a powerful geolocation tool for Android, designed as a modern Wardriving App. It scans for nearby WiFi networks and Bluetooth devices, records their signal strength and location, and visualizes the collected data on an interactive map.

Detected networks and devices are shown live on the map within the app. All scan results are saved in a local SQLite database (.db), which can be exported and loaded both on Android and on your PC for further analysis.

On Android, you can view, filter, and manage the data directly in the app. For advanced analysis and visualization, simply transfer the .db file to your PC and use the included Python tools to merge, plot, and explore your scan data interactively.

GeoGrabber is ideal for network analysis, signal mapping, and understanding wireless device distribution in different areasβ€”whether on your mobile device or desktop.

Note: This app is intended for legal, ethical wardriving, educational purposes, and authorized network analysis only. Please respect privacy laws and only scan networks in areas where you have permission.

✨ Features

πŸ“‘ Network Scanning

πŸ—ΊοΈ Location & Mapping

πŸ’Ύ Data Management

πŸ” Security Features

πŸ“‹ Network Information Captured

WiFi Networks: | Property | Description | |β€”β€”β€”-|β€”β€”β€”β€”-| | SSID | Network Name | | BSSID | MAC Address | | Signal Strength | Power level in dBm | | Frequency | Operating frequency in MHz | | Channel | WiFi channel number | | Channel Width | Bandwidth (20/40/80/160 MHz) | | Security | Encryption type (WPA2, WPA3, etc.) | | GPS Coordinates | Latitude & Longitude | | Timestamp | Scan date & time |

Bluetooth Devices: | Property | Description | |β€”β€”β€”-|β€”β€”β€”β€”-| | Device Name | Bluetooth device name | | MAC Address | Hardware address | | Device Type | Classic or BLE | | Signal Strength | RSSI value | | GPS Coordinates | Latitude & Longitude | | Timestamp | Scan date & time |

πŸ“Έ Screenshots

GeoGrabber Main UI v1.0.1 GeoGrabber Map View v1.0.1

Screenshot Description:

The screenshot above demonstrates the main scanning interface, live network list, and debug log. The app provides real-time updates and easy access to mapping and data management features.

πŸ“‹ Requirements

System Requirements

Component Requirement
Android Version Android 6.0 (API 23) or higher
RAM 2 GB minimum (4 GB recommended)
Storage 50 MB for app, variable for database
GPS Required for location tracking

Required Permissions

Permission Purpose
ACCESS_FINE_LOCATION Precise GPS coordinates
ACCESS_COARSE_LOCATION Approximate location
ACCESS_WIFI_STATE WiFi status monitoring
CHANGE_WIFI_STATE WiFi scanning control
BLUETOOTH Bluetooth basic access
BLUETOOTH_ADMIN Bluetooth device management
BLUETOOTH_SCAN Bluetooth scanning (Android 12+)
BLUETOOTH_CONNECT Bluetooth connection (Android 12+)
FOREGROUND_SERVICE Background scanning
READ_EXTERNAL_STORAGE Database import
WRITE_EXTERNAL_STORAGE Database export

πŸ“¦ Installation

⚠️ Note (October 2025):

There are currently issues with automatic dependency installation via the setup scripts (setup.bat / setup.sh) due to network or PyPI problems. This will be fixed soon. In the meantime, you can manually install the required Python packages in your virtual environment:

Manual Installation:

  1. Activate your virtual environment:
    • Windows: venv\Scripts\activate.bat or venv\Scripts\Activate.ps1
    • Linux: source venv/bin/activate
  2. Download the required wheel files for each package (e.g. from https://pypi.org/project/folium/#files and https://pypi.org/project/branca/#files).
  3. Install them manually:
    pip install path/to/folium-*.whl
    pip install path/to/branca-*.whl
    pip install geopy
    
  4. If you encounter further dependency errors, download and install those packages in the same way.

The setup scripts will be updated soon for improved reliability.

Prerequisites:

Steps:

# 1. Clone the repository
git clone https://github.com/arn-c0de/Geograbber.git
cd Geograbber

# 2. Open in Android Studio
# Open Android Studio -> Open -> Select 'WIFIGEOGRABBER' directory

# 3. Sync Gradle
# Android Studio will automatically sync Gradle dependencies

# 4. Build the project
# Build -> Make Project (Ctrl+F9)

# 5. Run on device
# Run -> Run 'app' (Shift+F10)

Option 2: Install APK

  1. Download the latest APK from the Releases page
  2. Enable β€œInstall from Unknown Sources” in your Android settings:
    • Settings β†’ Security β†’ Unknown Sources (Android 7 and below)
    • Settings β†’ Apps β†’ Special Access β†’ Install Unknown Apps (Android 8+)
  3. Install the APK on your device

Post-Installation Setup

  1. Grant Permissions – The app will request necessary permissions on first launch
  2. Enable Location – Ensure GPS is enabled for accurate coordinates
  3. Enable Bluetooth – Required for Bluetooth device scanning

πŸ” Secret Management

For API key management, environment variables, and security best practices:

Note: Currently, the project works 100% offline and requires no API keys. The secret management system is provided for future extensibility.

πŸ’‘ Usage

Basic Scanning

1. Start WiFi Scanning

Tap "WiFi Start" button β†’ App begins scanning for WiFi networks

2. Enable Bluetooth Scanning

Tap "BT Off" button β†’ Bluetooth scanning activates

3. View Results

Scanned networks appear in the list below the control buttons
Real-time updates with signal strength and details

4. View on Map

Tap "Show Map" β†’ Visualize collected data on interactive map

Map View Features

Action Description
Refresh Update map with latest scanned data
Location Center map on your current GPS position
Zoom Pinch to zoom in/out
Pan Drag to move around the map
Marker Click View detailed information about a device
Back Return to the main scanning interface

Advanced Features

More Actions Menu (Tap β€œMore”):

Option Description
πŸ’Ύ Save Database Export database as file for backup
πŸ—‘οΈ Delete Database Clear all stored data
πŸ“Š Show Network Count Display statistics (WiFi + Bluetooth)
πŸ“₯ Import Database Load external database for analysis
πŸ“‹ Show Data View all stored networks and devices

🐍 Python Tools

The project includes Python scripts for advanced data analysis and visualization:

Database Combiner

Merge multiple database files from different scanning sessions.

# Navigate to Python directory
cd Python

# Run the combiner script
python start_combine_dbs.py

πŸ“š Database Combiner Quickstart

Map Viewer (Plot GUI)

Visualize scanning data on an advanced interactive map with filtering options.

# Navigate to Python directory
cd Python

# Run the plot GUI
python start_plot_gui.py

πŸ“š Map Viewer Quickstart

Features:

πŸ—οΈ Technical Details

Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Android App                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  UI Layer (Activities & Fragments)                      β”‚
β”‚  β”œβ”€ Main Scanning Interface                             β”‚
β”‚  β”œβ”€ Map Viewer (WebView + Leaflet.js)                   β”‚
β”‚  └─ Settings & Data Management                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Business Logic                                         β”‚
β”‚  β”œβ”€ WiFi Scanner Service                                β”‚
β”‚  β”œβ”€ Bluetooth Scanner Service                           β”‚
β”‚  β”œβ”€ Location Manager                                    β”‚
β”‚  └─ Background Service (Foreground)                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Data Layer                                             β”‚
β”‚  β”œβ”€ SQLite Database                                     β”‚
β”‚  β”œβ”€ Database Helper                                     β”‚
β”‚  └─ Data Models                                         β”‚      
β”‚                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technology Stack

Component Technology
Language Java
Database SQLite
Mapping Leaflet.js (WebView-based)
Location Google Play Services Fused Location Provider
Background Service Android Foreground Service
Build System Gradle (Kotlin DSL)

Database Schema

wifi_data table:

CREATE TABLE wifi_data (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    bssid TEXT NOT NULL,
    ssid TEXT,
    signal_strength INTEGER,
    frequency INTEGER,
    channel INTEGER,
    channel_width INTEGER,
    security_type TEXT,
    timestamp TEXT,
    latitude REAL,
    longitude REAL
);

device_data table:

CREATE TABLE device_data (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    device_id TEXT,
    device_name TEXT,
    device_type TEXT,
    mac_address TEXT NOT NULL,
    signal_strength INTEGER,
    timestamp TEXT,
    latitude REAL,
    longitude REAL
);

Performance Metrics

Operation Average Time Notes
WiFi Scan 2-5 seconds Depends on device & network density
Bluetooth Scan 5-10 seconds Standard discovery time
Database Write <100ms Single entry
Map Rendering 1-3 seconds Depends on marker count
Database Query <500ms 1000 entries

πŸ”’ Privacy & Ethics

Intended Use Cases

βœ… Allowed:

❌ Not Allowed:

Important Notes

⚠️ Legal Considerations:

⚠️ Ethical Guidelines:

πŸ›‘οΈ Data Security:

⚠️ Known Limitations

Android Platform Restrictions

Limitation Description Workaround
Scan Throttling (Android 9+) Background WiFi scans limited to ~4 per 2 minutes Use foreground service
Bluetooth Permissions (Android 12+) Requires BLUETOOTH_SCAN and BLUETOOTH_CONNECT Request at runtime
Location Requirement WiFi scanning requires location permission Mandatory on Android 6+
Hidden Networks SSIDs may not be available for hidden networks Shows as empty SSID
Battery Optimization Background scanning may be restricted Request battery optimization exemption

Device-Specific Issues

Technical Constraints

πŸ“˜ View Detailed Structure – Complete file tree, database schema, and technical details

🀝 Contributing

We welcome contributions from the community! Here’s how you can help:

Ways to Contribute

Type Description
πŸ› Bug Reports Found a bug? Open an issue with details
πŸ’‘ Feature Requests Have an idea? Suggest new features
πŸ“ Documentation Improve docs, add tutorials
πŸ”§ Code Contributions Submit pull requests
🌐 Translations Help translate the app

Development Workflow

  1. Fork the Repository
    # Click 'Fork' on GitHub
    git clone https://github.com/arn-c0de/Geograbber.git
    cd Geograbber
    
  2. Create a Feature Branch
    git checkout -b feature/amazing-feature
    
  3. Make Your Changes
    • Follow Java coding conventions
    • Add comments and documentation
    • Test thoroughly on multiple devices
  4. Commit Your Changes
    git add .
    git commit -m "Add amazing feature: [description]"
    
  5. Push to Your Fork
    git push origin feature/amazing-feature
    
  6. Create a Pull Request
    • Go to the original repository
    • Click β€œNew Pull Request”
    • Describe your changes in detail

Coding Standards

Reporting Issues

When reporting bugs, please include:

πŸ“„ License

This project is licensed under the GeoGrabber License (Non-Commercial).

You are free to use, modify, and share this software for personal, educational, and research purposes only. Commercial use, resale, or distribution for profit is strictly prohibited without explicit written permission from the project maintainer.

See the LICENSE file for full terms and conditions.

⚠️ Disclaimer

IMPORTANT LEGAL NOTICE:

This application is provided β€œAS IS” for educational and research purposes only. The developers and contributors:

Users are solely responsible for:

By using this application, you agree to:

πŸ“ž Contact

Project Maintainer: arn-c0de

Contact Method Link
πŸ› Issues GitHub Issues
πŸ’¬ Discussions GitHub Discussions
πŸ“§ Email arn-c0de@protonmail.com
🌐 Website  

πŸ™ Acknowledgments

This project is built with the help of:

Special Thanks

⭐ Star this repo if you find it useful!

Last Updated: October 30, 2025