- 1. getaddrinfo簡介
- getaddrinfo可解析得到IPv6地址,而gethostbyname僅能得到IPv4地址。getaddrinfo在Python的socket包中,以下為python官網對getaddrinfo的解釋:
- 轉自: http://docs.python.org/2/library/socket.html
- socket. getaddrinfo ( host, port [, family [, socktype [, proto [, flags ] ] ] ] )
-
Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API.
The family, socktype and proto arguments can be optionally specified in order to narrow the list of addresses returned. By default, their value is 0, meaning that the full range of results is selected. The flags argument can be one or several of the AI_* constants, and will influence how results are computed and returned. Its default value is 0. For example, AI_NUMERICHOST will disable domain name resolution and will raise an error if host is a domain name.
The function returns a list of 5-tuples with the following structure:
(family, socktype, proto, canonname, sockaddr)
In these tuples, family, socktype, proto are all integers and are meant to be passed to the socket() function. canonname will be a string representing the canonical name of the host if AI_CANONNAME is part of the flags argument; else canonname will be empty. sockaddr is a tuple describing a socket address, whose format depends on the returned family (a (address, port) 2-tuple for AF_INET, a (address, port, flow info, scope id) 4-tuple for AF_INET6), and is meant to be passed to the socket.connect() method.
The following example fetches address information for a hypothetical TCP connection to www.python.org on port 80 (results may differ on your system if IPv6 isn’t enabled):
>>> socket.getaddrinfo("www.python.org", 80, 0, 0, socket.SOL_TCP) [(2, 1, 6, '', ('82.94.164.162', 80)), (10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0)
2. socekt.getaddrinfo的返回值介紹
- family: 表示socket使用的協議簇。常用的協議簇包括AF_UNIX(本機通信)/AF_INET(TCP/IP協議簇中的IPv4協議)/AF_INET6(TCP/IP協議簇中的IPv4協議)。在python的socket包中,用1表示AF_UNIX,2表示AF_INET,10表示AF_INET6。
- sockettype:表示socket的類型。常見的socket類型包括SOCK_STREAM(TCP流)/SOCK_DGRAM(UDP數據報)/SOCK_RAW(原始套接字)。其中,SOCK_STREAM=1,SOCK_DGRAM=2,SOCK_RAW=3
- proto:顧名思義,就是指定協議。套接口所用的協議。如調用者不想指定,可用0。常用的協議有,IPPROTO_TCP(=6)和IPPTOTO_UDP(=17),它們分別對應TCP傳輸協議、UDP傳輸協議。