74 lines
1.6 KiB
Python
Executable File
74 lines
1.6 KiB
Python
Executable File
#!/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()
|