fall back to ipv4 for local nodes if no ipv6 connection is available

This commit is contained in:
j 2014-05-22 16:20:40 +02:00
commit dc2121293e
9 changed files with 151 additions and 72 deletions

View file

@ -3,6 +3,7 @@
from __future__ import division
import os
import sys
import Image
from StringIO import StringIO
import re
@ -12,6 +13,7 @@ import cStringIO
import gzip
import time
from datetime import datetime
import subprocess
import ox
import ed25519
@ -121,6 +123,33 @@ def get_public_ipv6():
ip = None
return ip
def get_interface():
interface = ''
if sys.platform == 'darwin':
#cmd = ['/usr/sbin/netstat', '-rn']
cmd = ['/sbin/route', '-n', 'get', 'default']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
stdout, stderr = p.communicate()
interface = [[p.strip() for p in s.split(':', 1)] for s in stdout.strip().split('\n') if 'interface' in s]
if interface:
interface = '%%%s' % interface[0][1]
else:
interface = ''
return interface
def get_local_ipv4():
ip = socket.gethostbyaddr(socket.getfqdn())[-1][0]
if ip == '127.0.0.1':
cmd = ['ip', 'route', 'show']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
stdout, stderr = p.communicate()
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]
return [p for p in local_ip[0].split(' ')[1:] if '.' in p][0]
return ip
def update_dict(root, data):
for key in data:
keys = map(lambda part: part.replace('\0', '\\.'), key.replace('\\.', '\0').split('.'))