mirror of
https://github.com/exo-explore/exo.git
synced 2026-06-03 03:39:03 -04:00
36 lines
991 B
Python
36 lines
991 B
Python
#!/usr/bin/env python3
|
|
import argparse
|
|
import socket
|
|
import sys
|
|
|
|
|
|
def main() -> int:
|
|
p = argparse.ArgumentParser(
|
|
description="IPv6 UDP server bound to a specific local address"
|
|
)
|
|
p.add_argument(
|
|
"--bind", required=True, help="Local IPv6 address to bind to, e.g. fde0:..."
|
|
)
|
|
p.add_argument("--port", type=int, default=45679, help="UDP port to listen on")
|
|
p.add_argument("--reply", default="ok", help="Reply prefix")
|
|
args = p.parse_args()
|
|
|
|
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
|
|
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1)
|
|
s.bind((args.bind, args.port, 0, 0))
|
|
|
|
print(f"listening on [{args.bind}]:{args.port}")
|
|
print(f"sockname={s.getsockname()}")
|
|
|
|
data, peer = s.recvfrom(65535)
|
|
print(f"from={peer} data={data!r}")
|
|
|
|
out = args.reply.encode() + b":" + data
|
|
s.sendto(out, peer)
|
|
print(f"sent={out!r} to={peer}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|