list server ips on windows

This commit is contained in:
ed 2021-07-28 01:18:38 +02:00
parent 3bfc699787
commit e65f127571
4 changed files with 63 additions and 17 deletions

View file

@ -4,7 +4,7 @@ from __future__ import print_function, unicode_literals
import re import re
import socket import socket
from .__init__ import MACOS from .__init__ import MACOS, ANYWIN
from .util import chkcmd from .util import chkcmd
@ -85,7 +85,7 @@ class TcpSrv(object):
def ips_linux(self): def ips_linux(self):
eps = {} eps = {}
try: try:
txt, _ = chkcmd("ip", "addr") txt, _ = chkcmd(["ip", "addr"])
except: except:
return eps return eps
@ -93,9 +93,7 @@ class TcpSrv(object):
for ln in txt.split("\n"): for ln in txt.split("\n"):
try: try:
ip, dev = r.match(ln.rstrip()).groups() ip, dev = r.match(ln.rstrip()).groups()
for lip in listen_ips: eps[ip] = dev
if lip in ["0.0.0.0", ip]:
eps[ip] = dev
except: except:
pass pass
@ -104,7 +102,7 @@ class TcpSrv(object):
def ips_macos(self): def ips_macos(self):
eps = {} eps = {}
try: try:
txt, _ = chkcmd("ifconfig") txt, _ = chkcmd(["ifconfig"])
except: except:
return eps return eps
@ -122,14 +120,62 @@ class TcpSrv(object):
return eps return eps
def detect_interfaces(self, listen_ips): def ips_windows_ipconfig(self):
eps = {} eps = {}
try:
txt, _ = chkcmd(["ipconfig"])
except:
return eps
rdev = re.compile(r"(^[^ ].*):$")
rip = re.compile(r"^ +IPv?4? [^:]+: *([0-9\.]{7,15})$")
dev = None
for ln in txt.replace("\r", "").split("\n"):
m = rdev.match(ln)
if m:
dev = m.group(1).split(" adapter ", 1)[-1]
m = rip.match(ln)
if m and dev:
eps[m.group(1)] = dev
dev = None
return eps
def ips_windows_netsh(self):
eps = {}
try:
txt, _ = chkcmd("netsh interface ip show address".split())
except:
return eps
rdev = re.compile(r'.* "([^"]+)"$')
rip = re.compile(r".* IP\b.*: +([0-9\.]{7,15})$")
dev = None
for ln in txt.replace("\r", "").split("\n"):
m = rdev.match(ln)
if m:
dev = m.group(1)
m = rip.match(ln)
if m and dev:
eps[m.group(1)] = dev
dev = None
return eps
def detect_interfaces(self, listen_ips):
if MACOS: if MACOS:
eps = self.ips_macos() eps = self.ips_macos()
elif ANYWIN:
eps = self.ips_windows_ipconfig() # sees more interfaces
eps.update(self.ips_windows_netsh()) # has better names
else: else:
eps = self.ips_linux() eps = self.ips_linux()
if "0.0.0.0" not in listen_ips:
eps = {k: v for k, v in eps if k in listen_ips}
default_route = None default_route = None
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for ip in [ for ip in [

View file

@ -306,7 +306,7 @@ class ThumbSrv(object):
cmd += [fsenc(tpath)] cmd += [fsenc(tpath)]
ret, sout, serr = runcmd(*cmd) ret, sout, serr = runcmd(cmd)
if ret != 0: if ret != 0:
msg = ["ff: {}".format(x) for x in serr.split("\n")] msg = ["ff: {}".format(x) for x in serr.split("\n")]
self.log("FFmpeg failed:\n" + "\n".join(msg), c="1;30") self.log("FFmpeg failed:\n" + "\n".join(msg), c="1;30")

View file

@ -1125,7 +1125,7 @@ def guess_mime(url, fallback="application/octet-stream"):
return ret return ret
def runcmd(*argv): def runcmd(argv):
p = sp.Popen(argv, stdout=sp.PIPE, stderr=sp.PIPE) p = sp.Popen(argv, stdout=sp.PIPE, stderr=sp.PIPE)
stdout, stderr = p.communicate() stdout, stderr = p.communicate()
stdout = stdout.decode("utf-8", "replace") stdout = stdout.decode("utf-8", "replace")
@ -1133,8 +1133,8 @@ def runcmd(*argv):
return [p.returncode, stdout, stderr] return [p.returncode, stdout, stderr]
def chkcmd(*argv): def chkcmd(argv):
ok, sout, serr = runcmd(*argv) ok, sout, serr = runcmd(argv)
if ok != 0: if ok != 0:
raise Exception(serr) raise Exception(serr)

View file

@ -31,7 +31,7 @@ if MACOS:
from copyparty.util import Unrecv from copyparty.util import Unrecv
def runcmd(*argv): def runcmd(argv):
p = sp.Popen(argv, stdout=sp.PIPE, stderr=sp.PIPE) p = sp.Popen(argv, stdout=sp.PIPE, stderr=sp.PIPE)
stdout, stderr = p.communicate() stdout, stderr = p.communicate()
stdout = stdout.decode("utf-8") stdout = stdout.decode("utf-8")
@ -39,8 +39,8 @@ def runcmd(*argv):
return [p.returncode, stdout, stderr] return [p.returncode, stdout, stderr]
def chkcmd(*argv): def chkcmd(argv):
ok, sout, serr = runcmd(*argv) ok, sout, serr = runcmd(argv)
if ok != 0: if ok != 0:
raise Exception(serr) raise Exception(serr)
@ -60,12 +60,12 @@ def get_ramdisk():
if os.path.exists("/Volumes"): if os.path.exists("/Volumes"):
# hdiutil eject /Volumes/cptd/ # hdiutil eject /Volumes/cptd/
devname, _ = chkcmd("hdiutil", "attach", "-nomount", "ram://131072") devname, _ = chkcmd("hdiutil attach -nomount ram://131072".split())
devname = devname.strip() devname = devname.strip()
print("devname: [{}]".format(devname)) print("devname: [{}]".format(devname))
for _ in range(10): for _ in range(10):
try: try:
_, _ = chkcmd("diskutil", "eraseVolume", "HFS+", "cptd", devname) _, _ = chkcmd(["diskutil", "eraseVolume", "HFS+", "cptd", devname])
with open("/Volumes/cptd/.metadata_never_index", "w") as f: with open("/Volumes/cptd/.metadata_never_index", "w") as f:
f.write("orz") f.write("orz")