gatenet.discovery package

Submodules

gatenet.discovery.bluetooth module

async gatenet.discovery.bluetooth.async_discover_bluetooth_devices()[source]

Asynchronously scan for nearby Bluetooth devices.

Return type:

List[Dict[str, str]]

Returns:

List of discovered device dictionaries.

gatenet.discovery.bluetooth.discover_bluetooth_devices(timeout=8.0)[source]

Scan for nearby Bluetooth devices.

Parameters:

timeout (float, optional) – Time to scan in seconds (default is 8.0).

Returns:

List of discovered device dictionaries.

Return type:

List[Dict[str, str]]

Raises:

Exception – If an error occurs during Bluetooth discovery (caught and printed, returns empty list).

Example

>>> from gatenet.discovery.bluetooth import discover_bluetooth_devices
>>> devices = discover_bluetooth_devices(timeout=4.0)
>>> for device in devices:
...     print(device)
{'address': '00:1A:7D:DA:71:13', 'name': 'MyBluetoothDevice'}

gatenet.discovery.detectors module

class gatenet.discovery.detectors.BannerKeywordDetector[source]

Bases: ServiceDetector

Detects services by banner keywords.

BANNER_KEYWORDS = [(['telnet'], 'Telnet Server'), (['pop3'], 'POP3 Server'), (['imap'], 'IMAP Server')]
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.FTPDetector[source]

Bases: ServiceDetector

Service detector for FTP servers.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.FallbackDetector[source]

Bases: ServiceDetector

Fallback detector using default port services.

DEFAULT_PORT_SERVICES = {21: 'FTP', 22: 'SSH', 23: 'Telnet', 25: 'SMTP', 53: 'DNS', 80: 'HTTP', 110: 'POP3', 143: 'IMAP', 443: 'HTTPS', 993: 'IMAPS', 995: 'POP3S', 3389: 'RDP', 8000: 'HTTP', 8080: 'HTTP'}
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.GenericServiceDetector[source]

Bases: ServiceDetector

Detects services by generic indicators.

SERVICE_INDICATORS = {'apache': 'Apache Server', 'docker': 'Docker Registry', 'elasticsearch': 'Elasticsearch', 'gitlab': 'GitLab', 'jenkins': 'Jenkins CI/CD', 'mongodb': 'MongoDB Database', 'mysql': 'MySQL Database', 'nginx': 'Nginx Server', 'postgresql': 'PostgreSQL Database', 'redis': 'Redis Server'}
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.HTTPDetector[source]

Bases: ServiceDetector

Service detector for HTTP servers.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.PortMappingDetector[source]

Bases: ServiceDetector

Detects services by direct port mapping.

PORT_MAPPING = {23: 'Telnet Server', 53: 'DNS Server', 110: 'POP3 Server', 143: 'IMAP Server', 443: 'HTTPS Server', 993: 'IMAPS Server', 995: 'POP3S Server', 3389: 'Remote Desktop Protocol (RDP)'}
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.SMTPDetector[source]

Bases: ServiceDetector

Detects SMTP services.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.SSHDetector[source]

Bases: ServiceDetector

Service detector for SSH servers.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.detectors.ServiceDetector[source]

Bases: ABC

Abstract base class for service detection strategies.

All service detectors must implement the detect method.

abstractmethod detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

gatenet.discovery.mdns module

class gatenet.discovery.mdns.MDNSListener[source]

Bases: ServiceListener

Listener for mDNS service discovery.

add_service(zc, type_, name)[source]

Called when a service is discovered.

Parameters:
  • zc (Zeroconf) – Zeroconf instance.

  • type (str) – Service type.

  • name (str) – Service name.

Return type:

None

remove_service(zc, type_, name)[source]

Called when a service is removed.

Parameters:
  • zc (Zeroconf) – Zeroconf instance.

  • type (str) – Service type.

  • name (str) – Service name.

Return type:

None

update_service(zc, type_, name)[source]

Called when a service is updated.

Parameters:
  • zc (Zeroconf) – Zeroconf instance.

  • type (str) – Service type.

  • name (str) – Service name.

Return type:

None

gatenet.discovery.mdns.discover_mdns_services(timeout=2.0)[source]

Discover mDNS / Bonjour services on the local network.

Parameters:

timeout (float, optional) – Time in seconds to wait for service discovery (default is 2.0).

Returns:

List of discovered service dictionaries.

Return type:

List[Dict[str, str]]

Example

>>> from gatenet.discovery.mdns import discover_mdns_services
>>> services = discover_mdns_services(service_type="_http._tcp.local.", timeout=1.0)
>>> for svc in services:
...     print(svc)
{'name': 'My Service', 'address': '192.168.1.10', 'port': 8080, ...}

gatenet.discovery.service_discovery module

service_discovery.py

Unified service discovery for multiple protocols (SNMP, LDAP, CoAP, MQTT, SIP, etc).

Provides a single ServiceDiscovery class for extensible protocol detection.

class gatenet.discovery.service_discovery.ServiceDiscovery[source]

Bases: object

Unified service discovery for multiple protocols. Register protocols with ports and banner keywords.

Example

from gatenet.discovery.service_discovery import service_discovery result = service_discovery.detect(389, “LDAP server ready”) if result:

print(result[“protocol”]) # Output: LDAP

detect(port, banner)[source]

Detect the protocol based on port and banner.

Return type:

Optional[Dict]

Example

>>> sd = ServiceDiscovery()
>>> sd.register_protocol("LDAP", [389], ["LDAP server ready"])
>>> result = sd.detect(389, "LDAP server ready")
>>> print(result["protocol"])
register_protocol(name, ports, banner_keywords)[source]

Register a protocol for service discovery.

Example

>>> sd = ServiceDiscovery()
>>> sd.register_protocol("LDAP", [389], ["LDAP server ready"])

gatenet.discovery.ssh module

gatenet.discovery.ssh.clear_detectors(keep_defaults=True)[source]

Clear the registry.

If keep_defaults is True, restore built-ins; otherwise leave empty.

Return type:

None

gatenet.discovery.ssh.get_detectors()[source]
Return type:

List[ServiceDetector]

gatenet.discovery.ssh.register_detector(detector, *, append=True)[source]

Register a custom service detector.

Parameters:
  • detector (ServiceDetector) – The detector instance to add to the chain.

  • append (bool, optional) – If True, add to the end; if False, insert near the beginning (after SSH/HTTP).

Return type:

None

gatenet.discovery.ssh.register_detectors(detectors)[source]
Return type:

None

gatenet.discovery.upnp module

gatenet.discovery.upnp.discover_upnp_devices(timeout=3.0)[source]

Example

>>> from gatenet.discovery.upnp import discover_upnp_devices
>>> devices = discover_upnp_devices(timeout=2.0)
>>> for device in devices:
...     print(device)
{'LOCATION': 'http://192.168.1.1:1900/desc.xml', 'SERVER': 'Linux/3.14.0 UPnP/1.0 ...', ...}
Discover UPnP devices using SSDP.
Parameters:

timeout (float, optional) – Time in seconds to wait for responses (default is 3.0).

Returns:

List of discovered device info dictionaries.

Return type:

List[Dict[str, str]]

Module contents

Gatenet discovery module.

Provides service discovery functionality including mDNS, UPnP, Bluetooth, and various service detection strategies.

class gatenet.discovery.BannerKeywordDetector[source]

Bases: ServiceDetector

Detects services by banner keywords.

BANNER_KEYWORDS = [(['telnet'], 'Telnet Server'), (['pop3'], 'POP3 Server'), (['imap'], 'IMAP Server')]
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.FTPDetector[source]

Bases: ServiceDetector

Service detector for FTP servers.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.FallbackDetector[source]

Bases: ServiceDetector

Fallback detector using default port services.

DEFAULT_PORT_SERVICES = {21: 'FTP', 22: 'SSH', 23: 'Telnet', 25: 'SMTP', 53: 'DNS', 80: 'HTTP', 110: 'POP3', 143: 'IMAP', 443: 'HTTPS', 993: 'IMAPS', 995: 'POP3S', 3389: 'RDP', 8000: 'HTTP', 8080: 'HTTP'}
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.GenericServiceDetector[source]

Bases: ServiceDetector

Detects services by generic indicators.

SERVICE_INDICATORS = {'apache': 'Apache Server', 'docker': 'Docker Registry', 'elasticsearch': 'Elasticsearch', 'gitlab': 'GitLab', 'jenkins': 'Jenkins CI/CD', 'mongodb': 'MongoDB Database', 'mysql': 'MySQL Database', 'nginx': 'Nginx Server', 'postgresql': 'PostgreSQL Database', 'redis': 'Redis Server'}
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.HTTPDetector[source]

Bases: ServiceDetector

Service detector for HTTP servers.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.MDNSListener[source]

Bases: ServiceListener

Listener for mDNS service discovery.

add_service(zc, type_, name)[source]

Called when a service is discovered.

Parameters:
  • zc (Zeroconf) – Zeroconf instance.

  • type (str) – Service type.

  • name (str) – Service name.

Return type:

None

remove_service(zc, type_, name)[source]

Called when a service is removed.

Parameters:
  • zc (Zeroconf) – Zeroconf instance.

  • type (str) – Service type.

  • name (str) – Service name.

Return type:

None

update_service(zc, type_, name)[source]

Called when a service is updated.

Parameters:
  • zc (Zeroconf) – Zeroconf instance.

  • type (str) – Service type.

  • name (str) – Service name.

Return type:

None

class gatenet.discovery.PortMappingDetector[source]

Bases: ServiceDetector

Detects services by direct port mapping.

PORT_MAPPING = {23: 'Telnet Server', 53: 'DNS Server', 110: 'POP3 Server', 143: 'IMAP Server', 443: 'HTTPS Server', 993: 'IMAPS Server', 995: 'POP3S Server', 3389: 'Remote Desktop Protocol (RDP)'}
detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.SMTPDetector[source]

Bases: ServiceDetector

Detects SMTP services.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.SSHDetector[source]

Bases: ServiceDetector

Service detector for SSH servers.

detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

class gatenet.discovery.ServiceDetector[source]

Bases: ABC

Abstract base class for service detection strategies.

All service detectors must implement the detect method.

abstractmethod detect(port, banner)[source]

Detect service from port and banner.

Parameters:
  • port (int) – The port number associated with the service.

  • banner (str) – The banner string received from the service.

Returns:

The detected service name/version, or None if not detected.

Return type:

Optional[str]

async gatenet.discovery.async_discover_bluetooth_devices()[source]

Asynchronously scan for nearby Bluetooth devices.

Return type:

List[Dict[str, str]]

Returns:

List of discovered device dictionaries.

gatenet.discovery.clear_detectors(keep_defaults=True)[source]

Clear the registry.

If keep_defaults is True, restore built-ins; otherwise leave empty.

Return type:

None

gatenet.discovery.discover_bluetooth_devices(timeout=8.0)[source]

Scan for nearby Bluetooth devices.

Parameters:

timeout (float, optional) – Time to scan in seconds (default is 8.0).

Returns:

List of discovered device dictionaries.

Return type:

List[Dict[str, str]]

Raises:

Exception – If an error occurs during Bluetooth discovery (caught and printed, returns empty list).

Example

>>> from gatenet.discovery.bluetooth import discover_bluetooth_devices
>>> devices = discover_bluetooth_devices(timeout=4.0)
>>> for device in devices:
...     print(device)
{'address': '00:1A:7D:DA:71:13', 'name': 'MyBluetoothDevice'}
gatenet.discovery.discover_mdns_services(timeout=2.0)[source]

Discover mDNS / Bonjour services on the local network.

Parameters:

timeout (float, optional) – Time in seconds to wait for service discovery (default is 2.0).

Returns:

List of discovered service dictionaries.

Return type:

List[Dict[str, str]]

Example

>>> from gatenet.discovery.mdns import discover_mdns_services
>>> services = discover_mdns_services(service_type="_http._tcp.local.", timeout=1.0)
>>> for svc in services:
...     print(svc)
{'name': 'My Service', 'address': '192.168.1.10', 'port': 8080, ...}
gatenet.discovery.discover_upnp_devices(timeout=3.0)[source]

Example

>>> from gatenet.discovery.upnp import discover_upnp_devices
>>> devices = discover_upnp_devices(timeout=2.0)
>>> for device in devices:
...     print(device)
{'LOCATION': 'http://192.168.1.1:1900/desc.xml', 'SERVER': 'Linux/3.14.0 UPnP/1.0 ...', ...}
Discover UPnP devices using SSDP.
Parameters:

timeout (float, optional) – Time in seconds to wait for responses (default is 3.0).

Returns:

List of discovered device info dictionaries.

Return type:

List[Dict[str, str]]

gatenet.discovery.get_detectors()[source]
Return type:

List[ServiceDetector]

gatenet.discovery.register_detector(detector, *, append=True)[source]

Register a custom service detector.

Parameters:
  • detector (ServiceDetector) – The detector instance to add to the chain.

  • append (bool, optional) – If True, add to the end; if False, insert near the beginning (after SSH/HTTP).

Return type:

None

gatenet.discovery.register_detectors(detectors)[source]
Return type:

None