broadcast mdns on each local interface with the matching local ip
This commit is contained in:
parent
6f5deada62
commit
ad03b7ef2e
2 changed files with 47 additions and 79 deletions
52
oml/utils.py
52
oml/utils.py
|
|
@ -218,58 +218,6 @@ def get_interface():
|
|||
interface = ''
|
||||
return interface
|
||||
|
||||
def get_local_ipv4():
|
||||
ip = None
|
||||
if sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
|
||||
cmd = ['/sbin/route', '-n', 'get', 'default']
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
|
||||
stdout, stderr = p.communicate()
|
||||
stdout = stdout.decode('utf-8')
|
||||
interface = [[p.strip() for p in s.split(':', 1)]
|
||||
for s in stdout.strip().split('\n') if 'interface' in s]
|
||||
if interface:
|
||||
interface = interface[0][1]
|
||||
cmd = ['ifconfig', interface]
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
|
||||
stdout, stderr = p.communicate()
|
||||
stdout = stdout.decode('utf-8')
|
||||
ips = [l for l in stdout.split('\n') if 'inet ' in l]
|
||||
if ips:
|
||||
ip = ips[0].strip().split(' ')[1]
|
||||
elif sys.platform.startswith('linux'):
|
||||
cmd = ['ip', 'route', 'show']
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
|
||||
stdout, stderr = p.communicate()
|
||||
stdout = stdout.decode('utf-8')
|
||||
local = [l for l in stdout.split('\n') if 'default' in l]
|
||||
if local:
|
||||
dev = local[0].split(' ')[4]
|
||||
local_ip = [l for l in stdout.split('\n')
|
||||
if dev in l and not 'default' in l and 'src' in l]
|
||||
if local_ip:
|
||||
local_ip = [p for p in local_ip[0].split(' ')[1:] if '.' in p]
|
||||
if local_ip:
|
||||
ip = local_ip[0]
|
||||
if not ip:
|
||||
cmd = ['ip', 'addr', 'show']
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
|
||||
stdout, stderr = p.communicate()
|
||||
stdout = stdout.decode('utf-8')
|
||||
parts = stdout.split(' ')
|
||||
local_ip = [p for p in parts if dev in p]
|
||||
if local_ip:
|
||||
local_ip = re.compile('inet (\d+\.\d+\.\d+.\d+)').findall(local_ip[0])
|
||||
if local_ip:
|
||||
ip = local_ip[0]
|
||||
if not ip:
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(("8.8.8.8", 53))
|
||||
return s.getsockname()[0]
|
||||
except:
|
||||
pass
|
||||
return ip
|
||||
|
||||
def update_dict(root, data):
|
||||
for key in data:
|
||||
keys = [part.replace('\0', '.') for part in key.replace('\\.', '\0').split('.')]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue