Python socket.getaddrinfo() Examples
The following are 30
code examples of socket.getaddrinfo().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
socket
, or try the search function
.
Example #1
Source File: serving.py From recruit with Apache License 2.0 | 7 votes |
def select_address_family(host, port): """Return ``AF_INET4``, ``AF_INET6``, or ``AF_UNIX`` depending on the host and port.""" # disabled due to problems with current ipv6 implementations # and various operating systems. Probably this code also is # not supposed to work, but I can't come up with any other # ways to implement this. # try: # info = socket.getaddrinfo(host, port, socket.AF_UNSPEC, # socket.SOCK_STREAM, 0, # socket.AI_PASSIVE) # if info: # return info[0][0] # except socket.gaierror: # pass if host.startswith("unix://"): return socket.AF_UNIX elif ":" in host and hasattr(socket, "AF_INET6"): return socket.AF_INET6 return socket.AF_INET
Example #2
Source File: netutil.py From tornado-zh with MIT License | 6 votes |
def is_valid_ip(ip): """Returns true if the given string is a well-formed IP address. Supports IPv4 and IPv6. """ if not ip or '\x00' in ip: # getaddrinfo resolves empty strings to localhost, and truncates # on zero bytes. return False try: res = socket.getaddrinfo(ip, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_NUMERICHOST) return bool(res) except socket.gaierror as e: if e.args[0] == socket.EAI_NONAME: return False raise return True
Example #3
Source File: serving.py From recruit with Apache License 2.0 | 6 votes |
def get_sockaddr(host, port, family): """Return a fully qualified socket address that can be passed to :func:`socket.bind`.""" if family == af_unix: return host.split("://", 1)[1] try: res = socket.getaddrinfo( host, port, family, socket.SOCK_STREAM, socket.IPPROTO_TCP ) except socket.gaierror: return host, port return res[0][4]
Example #4
Source File: misc.py From misp42splunk with GNU Lesser General Public License v3.0 | 6 votes |
def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT, source_address=None): """Backport of 3-argument create_connection() for Py2.6. Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address err = None for res in getaddrinfo(host, port, 0, SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket(af, socktype, proto) if timeout is not _GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) sock.connect(sa) return sock except error as _: err = _ if sock is not None: sock.close() if err is not None: raise err else: raise error("getaddrinfo returns an empty list") # Backport from Py2.7 for Py2.6:
Example #5
Source File: netutil.py From tornado-zh with MIT License | 6 votes |
def is_valid_ip(ip): """Returns true if the given string is a well-formed IP address. Supports IPv4 and IPv6. """ if not ip or '\x00' in ip: # getaddrinfo resolves empty strings to localhost, and truncates # on zero bytes. return False try: res = socket.getaddrinfo(ip, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_NUMERICHOST) return bool(res) except socket.gaierror as e: if e.args[0] == socket.EAI_NONAME: return False raise return True
Example #6
Source File: wsgi_server_test.py From browserscope with Apache License 2.0 | 6 votes |
def test_basic_behavior(self): inet4_server = self.mox.CreateMock(wsgi_server._SingleAddressWsgiServer) inet6_server = self.mox.CreateMock(wsgi_server._SingleAddressWsgiServer) self.mox.StubOutWithMock(wsgi_server, '_SingleAddressWsgiServer') self.mox.StubOutWithMock(socket, 'getaddrinfo') socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE).AndReturn( [(None, None, None, None, ('127.0.0.1', 0, 'baz')), (None, None, None, None, ('::1', 0, 'baz'))]) wsgi_server._SingleAddressWsgiServer(('127.0.0.1', 0), None).AndReturn( inet4_server) inet4_server.start() inet4_server.port = 123 wsgi_server._SingleAddressWsgiServer(('::1', 123), None).AndReturn( inet6_server) inet6_server.start() self.mox.ReplayAll() self.server.start() self.mox.VerifyAll() self.assertItemsEqual([inet4_server, inet6_server], self.server._servers)
Example #7
Source File: server_setting.py From sslyze with GNU Affero General Public License v3.0 | 6 votes |
def _do_dns_lookup(hostname: str, port: int) -> str: try: addr_infos = socket.getaddrinfo(hostname, port, socket.AF_UNSPEC, socket.IPPROTO_IP) except (socket.gaierror, IndexError, ConnectionError): raise ServerHostnameCouldNotBeResolved(f"Could not resolve {hostname}") family, socktype, proto, canonname, sockaddr = addr_infos[0] # By default use the first DNS entry, IPv4 or IPv6 tentative_ip_addr = sockaddr[0] # But try to use IPv4 if we have both IPv4 and IPv6 addresses, to work around buggy networks for family, socktype, proto, canonname, sockaddr in addr_infos: if family == socket.AF_INET: tentative_ip_addr = sockaddr[0] return tentative_ip_addr
Example #8
Source File: interface.py From rift-python with Apache License 2.0 | 6 votes |
def create_socket_ipv6_tx_ucast(self, remote_address, port): try: sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) except IOError as err: self.warning("Could not create IPv6 UDP socket: %s", err) return None self.enable_addr_and_port_reuse(sock) try: sock_addr = socket.getaddrinfo(remote_address, port, socket.AF_INET6, socket.SOCK_DGRAM)[0][4] sock.connect(sock_addr) except IOError as err: self.warning("Could not connect UDP socket to address %s port %d: %s", remote_address, port, err) return None return sock
Example #9
Source File: ipip.py From scripts with MIT License | 6 votes |
def domain_ip_parser(ip_or_domain_or_url, local_dns, ipv6): """parsing the arg to get the hostname to query.""" #ip_or_domain_or_url = str(sys.argv[1]) if ip_or_domain_or_url.startswith("https://") or ip_or_domain_or_url.startswith("http://"): ip_or_domain = ip_or_domain_or_url.split('/')[2] elif ip_or_domain_or_url == ".": ip_or_domain = "" else: ip_or_domain = ip_or_domain_or_url if local_dns: import socket ip_or_domain = socket.gethostbyname(ip_or_domain) elif ipv6: import socket ip_or_domain = socket.getaddrinfo(ip_or_domain, None, socket.AF_INET6)[0][-1][0] return ip_or_domain
Example #10
Source File: wsgi_server_test.py From browserscope with Apache License 2.0 | 6 votes |
def test_ignore_other_errors(self): inet4_server = self.mox.CreateMock(wsgi_server._SingleAddressWsgiServer) inet6_server = self.mox.CreateMock(wsgi_server._SingleAddressWsgiServer) self.mox.StubOutWithMock(wsgi_server, '_SingleAddressWsgiServer') self.mox.StubOutWithMock(socket, 'getaddrinfo') socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE).AndReturn( [(None, None, None, None, ('127.0.0.1', 0, 'baz')), (None, None, None, None, ('::1', 0, 'baz'))]) wsgi_server._SingleAddressWsgiServer(('127.0.0.1', 0), None).AndReturn( inet4_server) inet4_server.start() inet4_server.port = 123 wsgi_server._SingleAddressWsgiServer(('::1', 123), None).AndReturn( inet6_server) inet6_server.start().AndRaise( wsgi_server.BindError('message', (errno.ENOPROTOOPT, 'no protocol'))) self.mox.ReplayAll() self.server.start() self.mox.VerifyAll() self.assertItemsEqual([inet4_server], self.server._servers)
Example #11
Source File: distributed.py From neat-python with BSD 3-Clause "New" or "Revised" License | 6 votes |
def host_is_local(hostname, port=22): # no port specified, just use the ssh port """ Returns True if the hostname points to the localhost, otherwise False. """ hostname = socket.getfqdn(hostname) if hostname in ("localhost", "0.0.0.0", "127.0.0.1", "1.0.0.127.in-addr.arpa", "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"): return True localhost = socket.gethostname() if hostname == localhost: return True localaddrs = socket.getaddrinfo(localhost, port) targetaddrs = socket.getaddrinfo(hostname, port) for (ignored_family, ignored_socktype, ignored_proto, ignored_canonname, sockaddr) in localaddrs: for (ignored_rfamily, ignored_rsocktype, ignored_rproto, ignored_rcanonname, rsockaddr) in targetaddrs: if rsockaddr[0] == sockaddr[0]: return True return False
Example #12
Source File: serving.py From jbox with MIT License | 6 votes |
def select_ip_version(host, port): """Returns AF_INET4 or AF_INET6 depending on where to connect to.""" # disabled due to problems with current ipv6 implementations # and various operating systems. Probably this code also is # not supposed to work, but I can't come up with any other # ways to implement this. # try: # info = socket.getaddrinfo(host, port, socket.AF_UNSPEC, # socket.SOCK_STREAM, 0, # socket.AI_PASSIVE) # if info: # return info[0][0] # except socket.gaierror: # pass if ':' in host and hasattr(socket, 'AF_INET6'): return socket.AF_INET6 return socket.AF_INET
Example #13
Source File: bootstrap.py From pycoind with MIT License | 6 votes |
def _start(self): def try_address(address): try: (ip_address, port) = address index = 0 for info in socket.getaddrinfo(ip_address, port, socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP): try: with self._lock: self._found.append((info[4][0], info[4][1])) except Exception, e: pass # snooze for some time, so each dns_seed has a chance # to add nodes, and get addresses from those nodes #snooze = -1 + 1.3 ** index #if snooze > 600: snooze = 600 + random.randint(0, 120) #index += 1 #time.sleep(snooze) except Exception, e: pass
Example #14
Source File: udprelay.py From neverendshadowsocks with Apache License 2.0 | 5 votes |
def __init__(self, config, dns_resolver, is_local, stat_callback=None): self._config = config if is_local: self._listen_addr = config['local_address'] self._listen_port = config['local_port'] self._remote_addr = config['server'] self._remote_port = config['server_port'] else: self._listen_addr = config['server'] self._listen_port = config['server_port'] self._remote_addr = None self._remote_port = None self._dns_resolver = dns_resolver self._password = common.to_bytes(config['password']) self._method = config['method'] self._timeout = config['timeout'] self._is_local = is_local self._cache = lru_cache.LRUCache(timeout=config['timeout'], close_callback=self._close_client) self._client_fd_to_server_addr = \ lru_cache.LRUCache(timeout=config['timeout']) self._dns_cache = lru_cache.LRUCache(timeout=300) self._eventloop = None self._closed = False self._sockets = set() if 'forbidden_ip' in config: self._forbidden_iplist = config['forbidden_ip'] else: self._forbidden_iplist = None addrs = socket.getaddrinfo(self._listen_addr, self._listen_port, 0, socket.SOCK_DGRAM, socket.SOL_UDP) if len(addrs) == 0: raise Exception("can't get addrinfo for %s:%d" % (self._listen_addr, self._listen_port)) af, socktype, proto, canonname, sa = addrs[0] server_socket = socket.socket(af, socktype, proto) server_socket.bind((self._listen_addr, self._listen_port)) server_socket.setblocking(False) self._server_socket = server_socket self._stat_callback = stat_callback
Example #15
Source File: socketutil.py From Pyro5 with MIT License | 5 votes |
def get_ip_address(hostname: str, workaround127: bool = False, version: int = None) \ -> Union[ipaddress.IPv4Address, ipaddress.IPv6Address]: """ Returns the IP address for the given host. If you enable the workaround, it will use a little hack if the ip address is found to be the loopback address. The hack tries to discover an externally visible ip address instead (this only works for ipv4 addresses). Set ipVersion=6 to return ipv6 addresses, 4 to return ipv4, 0 to let OS choose the best one or None to use config.PREFER_IP_VERSION. """ if not workaround127: with contextlib.suppress(ValueError): addr = ipaddress.ip_address(hostname) return addr def getaddr(ip_version): if ip_version == 6: family = socket.AF_INET6 elif ip_version == 4: family = socket.AF_INET elif ip_version == 0: family = socket.AF_UNSPEC else: raise ValueError("unknown value for argument ipVersion.") ip = socket.getaddrinfo(hostname or socket.gethostname(), 80, family, socket.SOCK_STREAM, socket.SOL_TCP)[0][4][0] if workaround127 and (ip.startswith("127.") or ip == "0.0.0.0"): return get_interface("4.2.2.2").ip return ipaddress.ip_address(ip) try: if hostname and ':' in hostname and version is None: version = 0 return getaddr(config.PREFER_IP_VERSION) if version is None else getaddr(version) except socket.gaierror: if version == 6 or (version is None and config.PREFER_IP_VERSION == 6): raise socket.error("unable to determine IPV6 address") return getaddr(0)
Example #16
Source File: client_cdm_run.py From codimension with GNU General Public License v3.0 | 5 votes |
def resolveHost(host): """Resolves a hostname to an IP address""" try: host, _ = host.split("@@") family = socket.AF_INET6 except ValueError: # version = 'v4' family = socket.AF_INET return socket.getaddrinfo(host, None, family, socket.SOCK_STREAM)[0][4][0]
Example #17
Source File: network.py From python-mysql-pool with MIT License | 5 votes |
def open_connection(self): """Open the TCP/IP connection to the MySQL server """ # Get address information addrinfo = [None] * 5 try: addrinfos = socket.getaddrinfo(self.server_host, self.server_port, 0, socket.SOCK_STREAM, socket.SOL_TCP) # If multiple results we favor IPv4, unless IPv6 was forced. for info in addrinfos: if self.force_ipv6 and info[0] == socket.AF_INET6: addrinfo = info break elif info[0] == socket.AF_INET: addrinfo = info break if self.force_ipv6 and addrinfo[0] is None: raise errors.InterfaceError( "No IPv6 address found for {0}".format(self.server_host)) if addrinfo[0] is None: addrinfo = addrinfos[0] except IOError as err: raise errors.InterfaceError( errno=2003, values=(self.get_address(), _strioerror(err))) else: (self._family, socktype, proto, _, sockaddr) = addrinfo # Instanciate the socket and connect try: self.sock = socket.socket(self._family, socktype, proto) self.sock.settimeout(self._connection_timeout) self.sock.connect(sockaddr) except IOError as err: raise errors.InterfaceError( errno=2003, values=(self.get_address(), _strioerror(err))) except Exception as err: raise errors.OperationalError(str(err))
Example #18
Source File: client_cdm_profile.py From codimension with GNU General Public License v3.0 | 5 votes |
def resolveHost(host): """Resolves a hostname to an IP address""" try: host, _ = host.split("@@") family = socket.AF_INET6 except ValueError: # version = 'v4' family = socket.AF_INET return socket.getaddrinfo(host, None, family, socket.SOCK_STREAM)[0][4][0]
Example #19
Source File: wsgi_server_test.py From browserscope with Apache License 2.0 | 5 votes |
def test_start_port_in_use(self): self.mox.StubOutWithMock(socket, 'getaddrinfo') self.mox.StubOutWithMock(self.server, 'bind') af = object() socktype = object() proto = object() socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE).AndReturn( [(af, socktype, proto, None, None)]) self.server.bind(af, socktype, proto).AndRaise(socket.error) self.mox.ReplayAll() self.assertRaises(wsgi_server.BindError, self.server.start) self.mox.VerifyAll()
Example #20
Source File: clientbase_cdm_dbg.py From codimension with GNU General Public License v3.0 | 5 votes |
def resolveHost(host): """Resolves a hostname to an IP address""" try: host, _ = host.split("@@") family = socket.AF_INET6 except ValueError: # version = 'v4' family = socket.AF_INET return socket.getaddrinfo(host, None, family, socket.SOCK_STREAM)[0][4][0]
Example #21
Source File: async_stats.py From bot with MIT License | 5 votes |
def __init__( self, loop: asyncio.AbstractEventLoop, host: str = 'localhost', port: int = 8125, prefix: str = None ): """Create a new client.""" family, _, _, _, addr = socket.getaddrinfo( host, port, socket.AF_INET, socket.SOCK_DGRAM)[0] self._addr = addr self._prefix = prefix self._loop = loop self._transport = None
Example #22
Source File: compact.py From bilibiliupload with MIT License | 5 votes |
def getaddrinfo(*args, **kwargs): addrlist = _getaddrinfo(*args, **kwargs) random.shuffle(addrlist) return addrlist
Example #23
Source File: __init__.py From tikapy with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _connect_socket(self): """ Connect the base socket. If self.address is a hostname, this function will loop through all available addresses until it can establish a connection. :raises: ClientError - if address/port has not been set - if no connection to remote socket could be established. """ if not self.address: raise ClientError('address has not been set') if not self.port: raise ClientError('address has not been set') for family, socktype, proto, _, sockaddr in \ socket.getaddrinfo(self.address, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM): try: self._base_sock = socket.socket(family, socktype, proto) except socket.error: self._base_sock = None continue try: self._base_sock.connect(sockaddr) except socket.error: self._base_sock.close() self._base_sock = None continue break if self._base_sock is None: LOG.error('could not open socket') raise ClientError('could not open socket')
Example #24
Source File: connection.py From ServerlessCrawler-VancouverRealState with MIT License | 5 votes |
def allowed_gai_family(): """This function is designed to work in the context of getaddrinfo, where family=socket.AF_UNSPEC is the default and will perform a DNS search for both IPv6 and IPv4 records.""" family = socket.AF_INET if HAS_IPV6: family = socket.AF_UNSPEC return family
Example #25
Source File: connection.py From ServerlessCrawler-VancouverRealState with MIT License | 5 votes |
def allowed_gai_family(): """This function is designed to work in the context of getaddrinfo, where family=socket.AF_UNSPEC is the default and will perform a DNS search for both IPv6 and IPv4 records.""" family = socket.AF_INET if HAS_IPV6: family = socket.AF_UNSPEC return family
Example #26
Source File: connection.py From core with MIT License | 5 votes |
def allowed_gai_family(): """This function is designed to work in the context of getaddrinfo, where family=socket.AF_UNSPEC is the default and will perform a DNS search for both IPv6 and IPv4 records.""" family = socket.AF_INET if HAS_IPV6: family = socket.AF_UNSPEC return family
Example #27
Source File: fakesession.py From ipmisim with Apache License 2.0 | 5 votes |
def _xmit_packet(self, retry=True, delay_xmit=None): if self.sequencenumber: self.sequencenumber += 1 if delay_xmit is not None: # skip transmit, let retry timer do it's thing self.waiting_sessions[self] = {} self.waiting_sessions[self]['ipmisession'] = self self.waiting_sessions[self]['timeout'] = delay_xmit + _monotonic_time() return if self.sockaddr: self.send_data(self.netpacket, self.sockaddr) else: self.allsockaddrs = [] try: for res in socket.getaddrinfo(self.bmc, self.port, 0, socket.SOCK_DGRAM): sockaddr = res[4] if res[0] == socket.AF_INET: # convert the sockaddr to AF_INET6 newhost = '::ffff:' + sockaddr[0] sockaddr = (newhost, sockaddr[1], 0, 0) self.allsockaddrs.append(sockaddr) self.bmc_handlers[sockaddr] = self self.send_data(self.netpacket, sockaddr) except socket.gaierror: raise exc.IpmiException("Unable to transmit to specified address") if retry: self.waiting_sessions[self] = {} self.waiting_sessions[self]['ipmisession'] = self self.waiting_sessions[self]['timeout'] = self.timeout + _monotonic_time()
Example #28
Source File: tracker.py From sagemaker-xgboost-container with Apache License 2.0 | 5 votes |
def get_family(addr): return socket.getaddrinfo(addr, None)[0][0]
Example #29
Source File: tracker.py From sagemaker-xgboost-container with Apache License 2.0 | 5 votes |
def get_some_ip(host): return socket.getaddrinfo(host, None)[0][4][0]
Example #30
Source File: torcrawl.py From TorCrawl.py with GNU General Public License v3.0 | 5 votes |
def connectTor(): try: port = 9050 # Set socks proxy and wrap the urllib module socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', port) socket.socket = socks.socksocket # Perform DNS resolution through the socket def getaddrinfo(*args): return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))] socket.getaddrinfo = getaddrinfo except: e = sys.exc_info()[0] print("Error: %s" % e + "\n## Can't establish connection with TOR")