#!/usr/bin/env python3 """Publica servicios via mDNS/Zeroconf: SSH + Samba""" import socket import signal import sys from zeroconf import ServiceInfo, Zeroconf, IPVersion HOSTNAME = 'movil' SERVICES = [ { 'type': '_ssh._tcp.local.', 'port': 8022, 'props': {'description': 'Termux SSH'}, }, { 'type': '_smb._tcp.local.', 'port': 4450, 'props': {'description': 'Termux Samba', 'path': '/'}, }, ] def get_local_ip(): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] s.close() return ip except Exception: return '127.0.0.1' def main(): ip = get_local_ip() addr = socket.inet_aton(ip) zc = Zeroconf(ip_version=IPVersion.V4Only) infos = [] for svc in SERVICES: info = ServiceInfo( svc['type'], f'{HOSTNAME}.{svc["type"]}', addresses=[addr], port=svc['port'], properties=svc['props'], server=f'{HOSTNAME}.local.', ) zc.register_service(info) infos.append(info) print(f'Publicando {HOSTNAME}.local {svc["type"]} -> {ip}:{svc["port"]}') def cleanup(sig, frame): print('Deteniendo mDNS...') for info in infos: zc.unregister_service(info) zc.close() sys.exit(0) signal.signal(signal.SIGINT, cleanup) signal.signal(signal.SIGTERM, cleanup) try: signal.pause() except AttributeError: import time while True: time.sleep(3600) if __name__ == '__main__': main()