Skip to main content

Python library designed for OSINT, information gathering.

Project description

A Python toolkit for OSINT (IP intelligence & image EXIF metadata extraction & Etc-Soon)

Python License aiohttp colorama

Downloads Telegram Channel Telegram Discuss

Package Version Wheel


๐Ÿ“– Table of Contents


๐Ÿ” Overview

  • Osixr is a modular Python library designed for OSINT information gathering. It ships with two powerful engines:
Engine Description
IP Async IP geo-lookup, VPN/Proxy detection, and Google Maps link generation
ExiF Deep EXIF metadata extraction from JPEG/TIFF images โ€” camera, GPS, lens, capture settings
  • Both modules output styled, animated terminal reports using random ASCII art banners.

๐Ÿ“ฆ Modules

osixr/
โ”œโ”€โ”€ IP/          โ†’ Async IP intelligence & VPN/Proxy detection
โ”œโ”€โ”€ Exif/        โ†’ JPEG/TIFF EXIF metadata parser
โ””โ”€โ”€ Banners/     โ†’ ASCII art banners + colored terminal output

โš™๏ธ Installation

  • Via PyPi:
# Windows
$ pip install --upgrade osixr

# Linux
$ pipx install --upgrade osixr
  • Via Git:
$ pip install git+https://github.com/DevZ44d/Osixr.git

๐Ÿš€ Quick Start

import asyncio
from osixr import IPlock, ExiF

# IP Intelligence
async def run():
    #replace "8.8.8.8" to "me" to get your ip and scanning it
    scanner = IPlock(ip="8.8.8.8", timeout=8) 
    # Get clean JSON output (without banner: False)
    result = await scanner.get(banner=False, void_firewall=False)
    print(result)

asyncio.run(run())

# EXIF Metadata
async def _demo():
    e = ExiF("WIN.jpg")
    print(e.print_all())             # print banner and full-information .
    print((e.to_dict(banner=False))) # banner: bool = False -> Skip ASCII banner .


if __name__ == "__main__":
    asyncio.run(_demo())

๐Ÿ“˜ Usage

1. IPlock Module โ€” IP Intelligence & VPN Detection

  • The IPlock class is the high-level interface for async IP analysis.
  • It queries geo-IP APIs, detects VPN/Proxy usage, and generates a Google Maps link from the IP coordinates.

Basic Usage

import asyncio
from osixr import IPlock

async def main():
    #replace "8.8.8.8" to "me" to get your ip and scanning it
    scanner = IPlock(ip="8.8.8.8", timeout=8)
    result = await scanner.get(banner=False, void_firewall=False)
    print(result)

asyncio.run(main())

IPlock.__init__(ip, timeout)

Parameter Type Default Description
ip str | None โ€” Target IP address to analyze
timeout int | None 10 Request timeout in seconds

await IPlock.get() โ†’ str

  • Runs the full async IP analysis pipeline and returns a formatted terminal output string including a random ASCII art banner.
scanner = IPlock("1.1.1.1")
output = await scanner.get()
# Returns: banner + JSON result with geo data, VPN flag, Google Maps link

Sample output fields:

{
  "ip": "8.8.8.8",
  "success": true,
  "type": "IPv4",
  "continent": "North America",
  "continent_code": "NA",
  "country": "United States",
  "country_code": "US",
  "region": "California",
  "region_code": "CA",
  "city": "Mountain View",
  "latitude": 37.3860517,
  "longitude": -122.0838511,
  "is_eu": false,
  "postal": "94039",
  "calling_code": "1",
  "capital": "Washington D.C.",
  "borders": "CA,MX",
  "flag": {
    "img": "https://cdn.ipwhois.io/flags/us.svg",
    "emoji": "๐Ÿ‡บ๐Ÿ‡ธ",
    "emoji_unicode": "U+1F1FA U+1F1F8"
  },
  "connection": {
    "asn": 15169,
    "org": "Google LLC",
    "isp": "Google LLC",
    "domain": "google.com"
  },
  "timezone": {
    "id": "America/Los_Angeles",
    "abbr": "PDT",
    "is_dst": true,
    "offset": -25200,
    "utc": "-07:00"
  },
  "Takes": "2.22 s",
  "VPN/PROXY": true,
  "GooGle Map": "https://www.google.com/maps?q=37.3860517,-122.0838511"
}

Low-level: AsyncFetchDict (direct access)

import asyncio
from osixr.IP.utails import AsyncFetchDict

async def main():
    engine = AsyncFetchDict(ip="8.8.8.8", timeout=10)

    # Full formatted output (banner + JSON)
    #takes one arg : void_firewall: bool | None = False
    output = await engine.get_all()
    print(output)

    # Raw analysis dict only
    data = await engine.analyze()
    print(data)

asyncio.run(main())
Method Returns Description
await analyze(void_firewall=False) dict Raw IP analysis result with VPN flag, timing, map link
await get_all(banner=True, void_firewall=False) str Formatted terminal output with optional banner and firewall bypass support
clean_dict(data) dict Strips empty/null keys from any dictionary

Low-level: FirewallSafeVPNDetector (synchronous)

from osixr.IP.detector import FirewallSafeVPNDetector

vpn = FirewallSafeVPNDetector(timeout=6)

# Check if IP is VPN/Proxy/Hosting
is_vpn = vpn.detect("192.168.1.1")   # โ†’ True / False

# Get raw data from multiple APIs
raw_data = vpn.gather_data("8.8.8.8")  # โ†’ List[dict]
Method Returns Description
detect(ip) bool True = VPN/Proxy/Hosting detected, False = Clean IP
gather_data(ip) List[dict] Raw responses from multiple geo-IP APIs
is_vpn_isp(isp) bool Checks ISP name against known cloud/hosting keywords

Detection scoring logic:

Signal Score
ISP matches cloud/hosting keywords +60
API returns proxy: true flag +40
Threshold to flag as VPN/Proxy โ‰ฅ 60

2. ExiF Module โ€” Photo Metadata Extraction

  • The ExiF class extracts and displays complete EXIF metadata from JPEG or TIFF images.

Basic Usage

from osixr.main import ExiF

exif = ExiF("photo.jpg")
exif.print_all()   # Prints full report with animated banner to terminal

ExiF.__init__(img)

Parameter Type Description
img str Path to the image file (.jpg, .jpeg, .tif, .tiff)

ExiF.print_all() โ†’ None

  • Displays a full formatted metadata report in the terminal with an animated ASCII banner.
exif = ExiF("photo.jpg")
exif.print_all()

ExiF.to_dict โ†’ str | Any

  • Displays a full formatted metadata report in the terminal with or without an animated ASCII banner.
exif = ExiF("photo.jpg")
exif.get(banner=False)    # without an animated ASCII banner, default is True .

Low-level: Exif (direct access)

  • For programmatic access without terminal output:
from osixr.Exif.core.photo_info import Exif

info = Exif("photo.jpg")

# Get full formatted text report
report = info.print_all()
print(report)

# Get structured dict (8 sections)
data = info.to_dict()
print(data["gps_info"])
print(data["camera_info"])
Method Returns Description
print_all() str Full human-readable metadata report
to_dict() dict All metadata as structured nested dictionaries

to_dict() output structure:

{
  "file_info": {
    "File Name": "WIN.jpg",
    "File Path": "C:\\Users\\MF\\Desktop\\Osixr\\osixr\\src\\WIN.jpg",
    "File Size": "57.2 KB",
    "File Size (bytes)": "58,592",
    "File Extension": ".JPG",
    "File Modified": "2026-04-12 21:12:01",
    "File Created": "2026-04-12 23:32:42",
    "Dimensions (from header)": "1280 ร— 720 px"
  },
  "camera_info": {
    "Software": "Windows 11"
  },
  "image_info": {},
  "capture_settings": {},
  "datetime_info": {
    "Date/Time Original (Capture)": "Sunday, April 12, 2026 at 21:12:01"
  },
  "gps_info": {},
  "lens_info": {},
  "processing_info": {}
}

3. CLI โ€” Command-Line Interface

  • osixr ships with a full CLI so you can run every feature directly from the terminal โ€” no Python code needed.
  • Supports both osixr (after install) and python -m osixr (from source).

Installation check

$ osixr -c

Info Flags โ€” -v -c -o

  • Quick one-shot flags that don't require a subcommand.
Flag Long form Description
-v --version Show osixr version, author, and project links
-c --check Check PyPI for a newer release
-o --osixr Show the full osixr help & usage guide
-h --help Show the argparse help message
# Show version + author info
osixr -v
 
# Check if a new version is available on PyPI
osixr -c
 
# Show full help & usage guide
osixr -o

ip โ€” Full IP Geo-Lookup + VPN Detection

osixr ip <IP> [--timeout SEC] [--json] [--silent] [--save FILE]
Flag Default Description
ip โ€” Target IP address
--timeout SEC 10 Request timeout in seconds
--json off Print raw JSON output instead of styled report
--silent off Skip the ASCII art banner
--save FILE โ€” Save output to a JSON file
# Styled terminal report
#replace "8.8.8.8" to "me" to get your ip and scanning it .
osixr ip 8.8.8.8
 
# Raw JSON output
osixr ip 8.8.8.8 --json
 
# Save result to file
osixr ip 8.8.8.8 --save result.json
 
# Silent mode (no banner) with custom timeout
osixr ip 8.8.8.8 --silent --timeout 5
 
# Also works with python -m
python -m osixr ip 8.8.8.8 --silent

batch โ€” Scan Multiple IPs Concurrently

osixr batch <IP> [<IP> ...] [--timeout SEC] [--save FILE]
Flag Default Description
ips โ€” One or more IP addresses (space-separated)
--timeout SEC 10 Request timeout in seconds
--save FILE โ€” Save all results to a JSON file
# Scan three IPs at once
osixr batch 8.8.8.8 1.1.1.1 196.219.54.141
 
# Save batch results
osixr batch 8.8.8.8 1.1.1.1 --save batch.json
 
# Also works with python -m
python -m osixr batch 8.8.8.8 1.1.1.1 196.219.54.141

vpn โ€” Quick VPN / Proxy Detection Only

osixr vpn <IP>
Flag Default Description
ip โ€” Target IP address to check
# Check a single IP
osixr vpn 192.168.1.1
 
# Also works with python -m
python -m osixr vpn 8.8.8.8

Output:

  โš    VPN / PROXY / HOSTING DETECTED     โ† suspicious IP
  โœ”   Clean residential IP               โ† clean IP

exif โ€” Extract EXIF Metadata from Image

osixr exif <FILE> [--section NAME] [--json] [--silent] [--save FILE]
Flag Default Description
file โ€” Path to JPEG or TIFF image
--section NAME โ€” Show one section only (see table below)
--json off Print raw JSON output instead of styled report
--silent off Skip the ASCII art banner
--save FILE โ€” Save metadata to a JSON file

Available --section values:

Name Description
file File name, size, path, dimensions
camera Camera make, model, software
image Resolution, color space, orientation
capture Shutter speed, aperture, ISO, flash
datetime Original capture date & time
gps GPS coordinates + Google Maps link
lens Lens make, model, focal length
processing White balance, contrast, saturation
# Full metadata report
osixr exif photo.jpg
 
# GPS section only
osixr exif photo.jpg --section gps
 
# Camera info as JSON
osixr exif photo.jpg --section camera --json
 
# Save full metadata to file
osixr exif photo.jpg --save meta.json
 
# Silent mode (no banner)
osixr exif photo.jpg --silent
 
# Also works with python -m
python -m osixr exif photo.jpg --section gps --json

๐Ÿ—‚ Project Structure

osixr/
โ”‚โ”€โ”€ pyproject.toml        โ† Build system & project metadata (PEP 517/518)
โ”‚โ”€โ”€ README.md             โ† Documentation & usage guide
โ”‚โ”€โ”€ LICENSE               โ† Project license
โ”‚โ”€โ”€ src/
โ”‚   โ””โ”€โ”€ osixr/
โ”‚       โ”‚โ”€โ”€ forward.py    โ† Version info, help message & update checker
โ”‚       โ”‚โ”€โ”€ __init__.py   โ† Package initializer (public exports)
โ”‚       โ”œโ”€โ”€ main.py       โ† High-level entry point (IPlock, ExiF classes)
โ”‚       โ”‚โ”€โ”€ cli.py        โ† Command-line interface (argparse / user input handling)
โ”‚       โ”‚
โ”‚       โ”œโ”€โ”€ IP/
โ”‚       โ”‚   โ”œโ”€โ”€ __init__.py   โ† IP module initializer
โ”‚       โ”‚   โ”œโ”€โ”€ detector.py   โ† FirewallSafeVPNDetector (sync, multi-source VPN detection)
โ”‚       โ”‚   โ””โ”€โ”€ utails.py     โ† AsyncFetchDict (async geo-IP fetching + formatting via aiohttp)
โ”‚       โ”‚
โ”‚       โ”œโ”€โ”€ Exif/
โ”‚       โ”‚   โ”œโ”€โ”€ __init__.py   โ† Exif module initializer
โ”‚       โ”‚   โ”œโ”€โ”€ core/
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ jpeg_reader.py  โ† Low-level JPEG segment parser (APP markers extraction)
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ tiff_parser.py  โ† TIFF/EXIF binary decoder (endianness + tag parsing)
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ photo_info.py   โ† High-level metadata engine (Exif class abstraction)
โ”‚       โ”‚   โ””โ”€โ”€ utils/
โ”‚       โ”‚       โ”œโ”€โ”€ tags.py     โ† EXIF/GPS tag ID mappings (raw โ†’ readable names)
โ”‚       โ”‚       โ””โ”€โ”€ mapping.py  โ† Value decoding maps (flash, orientation, exposure, etc.)
โ”‚       โ”‚
โ”‚       โ””โ”€โ”€ Banners/
โ”‚           โ”‚โ”€โ”€ __init__.py
โ”‚           โ”œโ”€โ”€ banners.py  โ† ASCII art banner collection (15+ styles)
โ”‚           โ”œโ”€โ”€ utils.py    โ† BannerSplitLines (animated / line-by-line rendering)
โ”‚           โ””โ”€โ”€ helper.py   โ† Color constants wrapper (colorama abstraction)

Made with AhMed โ€” Pull requests welcome

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

osixr-2.0.7.tar.gz (46.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

osixr-2.0.7-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

File details

Details for the file osixr-2.0.7.tar.gz.

File metadata

  • Download URL: osixr-2.0.7.tar.gz
  • Upload date:
  • Size: 46.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for osixr-2.0.7.tar.gz
Algorithm Hash digest
SHA256 adc3dd54159a4d5bfef41a99a910182762a6cd32e68e0c383a5f766233c50bd8
MD5 dfd164e9b961b61fd8f414dc7ce6d6f6
BLAKE2b-256 824796b278d53145fa2e73dbabe392d084a219ee7055d072622d3859a5cabebd

See more details on using hashes here.

File details

Details for the file osixr-2.0.7-py3-none-any.whl.

File metadata

  • Download URL: osixr-2.0.7-py3-none-any.whl
  • Upload date:
  • Size: 42.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for osixr-2.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 aa116ecd5d51a1d20ad5510cfe9a53b9c3c0ffee54c2a0c0460c3230e93c824f
MD5 4ae65439f0ce8284231377201bf9312c
BLAKE2b-256 288fe22e77c68a9d49d5d40d7fa86e10aed8e58de66abef1f2a34539c0d10bdb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page