|
50 | 50 | import urllib.parse |
51 | 51 | from http.server import BaseHTTPRequestHandler, HTTPServer |
52 | 52 | from socketserver import ThreadingMixIn |
| 53 | +import ipaddress |
53 | 54 |
|
54 | 55 | # Terminal color capability for all platforms |
55 | 56 | try: |
|
82 | 83 | DEBUGMODE = os.getenv("DEBUGMODE", "no").lower() == "yes" |
83 | 84 | HOST = os.getenv("HOST", None) |
84 | 85 | BROADCAST = os.getenv("BROADCAST", None) |
85 | | - |
86 | | -# Set up broadcast address |
87 | | -if HOST and not BROADCAST: |
88 | | - BROADCAST = HOST.split('.') |
89 | | - BROADCAST[3] = '255' |
90 | | - BROADCAST = '.'.join(BROADCAST) |
| 86 | +NETWORK = None |
| 87 | + |
| 88 | +# If HOST specified, set up broadcast address and calculate network |
| 89 | +if HOST: |
| 90 | + if not BROADCAST: |
| 91 | + BROADCAST = HOST.split('.') |
| 92 | + BROADCAST[3] = '255' |
| 93 | + BROADCAST = '.'.join(BROADCAST) |
| 94 | + host_ip = ipaddress.IPv4Address(HOST) |
| 95 | + broadcast_ip = ipaddress.IPv4Address(BROADCAST) |
| 96 | + host_bits = int(host_ip) |
| 97 | + broadcast_bits = int(broadcast_ip) |
| 98 | + mask_length = 32 - (broadcast_bits - host_bits).bit_length() |
| 99 | + NETWORK = str(ipaddress.IPv4Network(f"{host_ip}/{mask_length}", strict=False)) |
91 | 100 |
|
92 | 101 | # Logging |
93 | 102 | log = logging.getLogger(__name__) |
@@ -677,6 +686,8 @@ def api(port): |
677 | 686 | print(" Using Host IP: %s%s%s" % (cyan, HOST, dim)) |
678 | 687 | if BROADCAST: |
679 | 688 | print(" Using Broadcast IP: %s%s%s" % (cyan, BROADCAST, dim)) |
| 689 | + if NETWORK: |
| 690 | + print(" Using Network: %s%s%s" % (cyan, NETWORK, dim)) |
680 | 691 | print(" UDP Ports: %s%d%s, %s%d%s, %s%d%s" % (cyan, UDPPORT, dim, cyan, UDPPORTS, dim, cyan, UDPPORTAPP, dim)) |
681 | 692 | print(" TCP Port: %s%d%s" % (cyan, TCPPORT, dim)) |
682 | 693 | print(" API Port: %s%d%s" % (cyan, APIPORT, dim)) |
@@ -719,7 +730,10 @@ def api(port): |
719 | 730 | # discover=True, wantips=None, wantids=None, snapshot=None, assume_yes=False, tuyadevices=[], |
720 | 731 | # maxdevices=0) |
721 | 732 | try: |
722 | | - found = scanner.devices(forcescan=True, verbose=False, discover=False, assume_yes=True, tuyadevices=tuyadevices) |
| 733 | + if NETWORK: |
| 734 | + found = scanner.devices(forcescan=[NETWORK], verbose=False, discover=False, assume_yes=True, tuyadevices=tuyadevices) |
| 735 | + else: |
| 736 | + found = scanner.devices(forcescan=True, verbose=False, discover=False, assume_yes=True, tuyadevices=tuyadevices) |
723 | 737 | except Exception as err: |
724 | 738 | log.error(f"Error during scanner.devices() {err}") |
725 | 739 | found = [] |
|
0 commit comments