Source code for olympus.utils.network

from contextlib import closing
import os
import socket
import fcntl
import struct


[docs]def get_free_port(): with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: s.bind(('', 0)) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) return s.getsockname()[1]
[docs]def get_hostname_ip(): host_name = socket.gethostname() return socket.gethostbyname(host_name)
[docs]def get_network_interface(): skip = {'docker', 'lo'} def good_interface(interface): for s in skip: if interface.startswith(s): return False return True interfaces = list(filter(good_interface, os.listdir('/sys/class/net/'))) if interfaces: return interfaces[0] return None
[docs]def get_ip_address(ifname=None): if ifname is None: return get_hostname_ip() if isinstance(ifname, str): ifname = ifname.encode('utf8') with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24])
[docs]def is_port_free(port): import errno try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('127.0.0.1', port)) except socket.error as e: return e.errno == errno.EADDRINUSE