Skip to main content

Python library for gateways, networks, and devices.

Project description

gatenet 🛰️

BETA

Changelog Static Badge

Package PyPI
Python Python
Tests CI codecov
License License
mindmap
  root(🛰️)
    diagnostics/
      dns
      geo
      ping
      port_scan
    client/
      base
        TCP
        UDP
    http_/
        base
            client
            server
            async_client
    socket/
        base
            TCP
            UDP
    discovery/
        MDNS
        UPNP
        SSH
        bluetooth

Python networking toolkit for sockets, UDP, and HTTP microservices — modular and testable.


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

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()

HTTP Server

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()

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: (Planned) Measure throughput to a host.

Example traceroute:

from gatenet.diagnostics.traceroute import traceroute

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

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.8.0.tar.gz (21.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.8.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gatenet-0.8.0.tar.gz
  • Upload date:
  • Size: 21.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.8.0.tar.gz
Algorithm Hash digest
SHA256 529c0255d6f4c7a83ef0c590ea78c2eee5e91b0c14ee769b87bd938de07d6b03
MD5 ca4eb03256448a7dfb8b48d7a37a6eb3
BLAKE2b-256 16723e77b5e2aced98d458073ade3d0b768e883f0d77df743f263b16f7f71c32

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gatenet-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 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.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0dee02ff3348dfb95b49ab157afbee6c318a3180b849cfb800b101ac6ad4da6
MD5 ef21c5d889f84ad4311af4451d7a29de
BLAKE2b-256 e3aea5df11d363b8f92f0211aae9afcbb8f2041851f99197b12a461ff8aa112c

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