Skip to content

Commit 2b84315

Browse files
authored
Merge pull request #518 from jasonacox/v1.15.0
Server - Add network configuration for force scan
2 parents e59d6bf + 2b495bc commit 2b84315

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

server/server.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import urllib.parse
5151
from http.server import BaseHTTPRequestHandler, HTTPServer
5252
from socketserver import ThreadingMixIn
53+
import ipaddress
5354

5455
# Terminal color capability for all platforms
5556
try:
@@ -82,12 +83,20 @@
8283
DEBUGMODE = os.getenv("DEBUGMODE", "no").lower() == "yes"
8384
HOST = os.getenv("HOST", None)
8485
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))
91100

92101
# Logging
93102
log = logging.getLogger(__name__)
@@ -677,6 +686,8 @@ def api(port):
677686
print(" Using Host IP: %s%s%s" % (cyan, HOST, dim))
678687
if BROADCAST:
679688
print(" Using Broadcast IP: %s%s%s" % (cyan, BROADCAST, dim))
689+
if NETWORK:
690+
print(" Using Network: %s%s%s" % (cyan, NETWORK, dim))
680691
print(" UDP Ports: %s%d%s, %s%d%s, %s%d%s" % (cyan, UDPPORT, dim, cyan, UDPPORTS, dim, cyan, UDPPORTAPP, dim))
681692
print(" TCP Port: %s%d%s" % (cyan, TCPPORT, dim))
682693
print(" API Port: %s%d%s" % (cyan, APIPORT, dim))
@@ -719,7 +730,10 @@ def api(port):
719730
# discover=True, wantips=None, wantids=None, snapshot=None, assume_yes=False, tuyadevices=[],
720731
# maxdevices=0)
721732
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)
723737
except Exception as err:
724738
log.error(f"Error during scanner.devices() {err}")
725739
found = []

0 commit comments

Comments
 (0)