Skip to main content

Python library for gateways, networks, and devices.

Project description

gatenet 🛰️

Static Badge Changelog

Package PyPI Python
Tests Coverage CI codecov
License License

Gatenet is a batteries-included Python networking toolkit for diagnostics, service discovery, mesh networking, and building robust socket, UDP, HTTP, and radio microservices.

  • Diagnostics: Traceroute, ping/latency, bandwidth, port scanning, geo IP, and more.
  • Service Discovery: Identify running services (SSH, HTTP, FTP, SMTP, mDNS, SSDP, Bluetooth, etc.) using banners, ports, and extensible detectors.
  • Socket & HTTP: Modular TCP/UDP/HTTP servers and clients, with async support.
  • Mesh & Radio: Modular mesh networking with LoRa, ESP, Wi-Fi, GPS, and SDR integration. Supports encrypted messaging, topology mapping, hardware scanning, and protocol extension.
  • Extensible: Strategy and chain-of-responsibility patterns for easy extension and custom detection.
  • Comprehensive tests and documentation.

Gatenet is designed for developers who need reliable, extensible, and well-tested networking tools for diagnostics, automation, and microservice development.


Installation

pip install gatenet

Features

  • Modular: Each component is modular and can be used independently.
  • Testable: Each component is designed to be testable with unit tests.
  • Service Discovery: Identify running services (SSH, HTTP, FTP, SMTP, etc.) using banners and ports.
  • Diagnostics: Tools for traceroute, latency, and bandwidth measurement.
  • Socket Servers & Clients: TCP, UDP, and HTTP server/client implementations.
  • Async Support: Asynchronous HTTP client and server.
  • Extensible: Strategy and chain-of-responsibility patterns for easy extension.
  • Comprehensive Documentation: With examples and usage guides.

Quickstart

TCP Client

# Synchronous usage
from gatenet.client.tcp import TCPClient

client = TCPClient(host="127.0.0.1", port=12345)
client.connect()
response = client.send("ping")
print(response)
client.close()

# --- Async usage ---
from gatenet.client.tcp import AsyncTCPClient
import asyncio

async def main():
    client = AsyncTCPClient(host="127.0.0.1", port=12345)
    await client.connect()
    response = await client.send("ping")
    print(response)
    await client.close()

asyncio.run(main())

HTTP Server

# Synchronous usage
from gatenet.http.server import HTTPServer

server = HTTPServer(host="0.0.0.0", port=8080)

@server.route("/status", method="GET")
def status_handler(req):
    return {"ok": True}

server.serve()

# --- Async usage ---
from gatenet.http_.async_client import AsyncHTTPClient
import asyncio

async def main():
    client = AsyncHTTPClient("http://localhost:8080")
    response = await client.get("/status")
    print(response)

asyncio.run(main())

Usage Examples

Service Discovery

Identify a service by port and banner:

from gatenet.discovery.ssh import _identify_service

service = _identify_service(22, "SSH-2.0-OpenSSH_8.9p1")
print(service)  # Output: "OpenSSH 8.9p1"

Use a specific detector:

from gatenet.discovery.ssh import HTTPDetector

detector = HTTPDetector()
result = detector.detect(80, "apache/2.4.41")
print(result)  # Output: "Apache HTTP Server"

Custom Service Detector

from gatenet.discovery.ssh import ServiceDetector
from typing import Optional

class CustomDetector(ServiceDetector):
    """Custom service detector implementation."""
    def detect(self, port: int, banner: str) -> Optional[str]:
        if 'myapp' in banner:
            return "MyCustomApp"
        return None

Service Discovery

  • SSH, HTTP, FTP, SMTP, and more: Uses a strategy pattern and chain of responsibility for extensible service detection.
  • Banner and port-based detection: Extracts service names and versions from banners and well-known ports.
  • Fallback detection: Always returns a result, even for unknown services.

See examples/discovery/ssh_discovery.py for more.


Diagnostics

  • Traceroute: Trace the route to a host.
  • Latency Measurement: Measure round-trip time to a host.
  • Bandwidth Measurement: Measure throughput to a host.

Example traceroute:

from gatenet.diagnostics.traceroute import traceroute

hops = traceroute("google.com")
for hop in hops:
    print(hop)

Example bandwidth measurement:

from gatenet.diagnostics.bandwidth import measure_bandwidth

result = measure_bandwidth("google.com")
print(f"Download: {result['download_mbps']} Mbps, Upload: {result['upload_mbps']} Mbps")

Tests

Run all tests with:

pytest
  • Uses pytest for all tests.
  • Includes unit and integration tests for all modules.
  • Use get_free_port() from gatenet.utils.net in tests to avoid port conflicts.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

  • Follow the code style and patterns used in the project.
  • Add tests for new features.
  • Update documentation as needed.

License

MIT

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

gatenet-0.11.3.tar.gz (45.8 kB view details)

Uploaded Source

Built Distribution

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

gatenet-0.11.3-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file gatenet-0.11.3.tar.gz.

File metadata

  • Download URL: gatenet-0.11.3.tar.gz
  • Upload date:
  • Size: 45.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for gatenet-0.11.3.tar.gz
Algorithm Hash digest
SHA256 fef44dc5207a32c60cbfd53ad6d0d4156abc7191f8bb0d0badb0105a6ac17032
MD5 a0a18c0a9dd0e9ccd9ac442e359f00f9
BLAKE2b-256 608d0a7f62a9c86f6a4434e6ec1c6ba3237faccb433fcea6f3a6a77746460c57

See more details on using hashes here.

File details

Details for the file gatenet-0.11.3-py3-none-any.whl.

File metadata

  • Download URL: gatenet-0.11.3-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for gatenet-0.11.3-py3-none-any.whl
Algorithm Hash digest
SHA256 fce6eeac1e6b4ec7f99a3aa211dfd4a872a7d945935e16ec5ef318dcefabafe7
MD5 0dc5465f7ec40a78d375d904cbd18400
BLAKE2b-256 f47d003092187b9405ff243c90a09daf2cdd6ff24692c863a6de211160f30d7c

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