Source code for nadzoring.network_base.service_on_port

"""Service name resolution for port numbers."""

from socket import getservbyport

_FALLBACK_SERVICES: dict[int, str] = {
    21: "ftp",
    22: "ssh",
    25: "smtp",
    53: "dns",
    80: "http",
    110: "pop3",
    143: "imap",
    443: "https",
    993: "imaps",
    995: "pop3s",
    3306: "mysql",
    5432: "postgresql",
    6379: "redis",
    8080: "http-alt",
    8443: "https-alt",
    27017: "mongodb",
}


[docs] def get_service_on_port(port: int) -> str: """ Return the service name associated with a given port number. First queries the system service database via ``socket.getservbyport``. Falls back to a built-in mapping of common ports when the system lookup fails, and returns ``"unknown"`` if the port is not recognised by either. Args: port: Port number to look up. Expected range is 0-65535. Returns: Lowercase service name (e.g. ``"http"``, ``"ssh"``), or ``"unknown"`` when the port is not recognised. Examples: >>> get_service_on_port(80) 'http' >>> get_service_on_port(22) 'ssh' >>> get_service_on_port(9999) 'unknown' """ try: return getservbyport(port) except (OSError, OverflowError, TypeError): return _FALLBACK_SERVICES.get(port, "Unknown")