标签:python
执行基本查询
最基本的查询就是正向查询,它根据一个主机名来查找ip地址。
getaddrinfo(...) getaddrinfo(host, port [, family, socktype, proto, flags]) -> list of (family, socktype, proto, canonname, sockaddr) Resolve host and port into addrinfo struct. #根据给定的参数host/port,相应的转换成一个包含用于创建socket对象的五元组, #参数host为域名,以字符串形式给出代表一个IPV4/IPV6地址或者None. #参数port如果字符串形式就代表一个服务名,比如“http”"ftp""email"等,或者为数字,或者为None #参数family为地主族,可以为AF_INET ,AF_INET6 ,AF_UNIX. #参数socketype可以为SOCK_STREAM(TCP)或者SOCK_DGRAM(UDP) #参数proto通常为0可以直接忽略 #参数flags为AI_*的组合,比如AI_NUMERICHOST,它会影响函数的返回值 #附注:给参数host,port传递None时建立在C基础,通过传递NULL。 #该函数返回一个五元组(family, socktype, proto, canonname, sockaddr),同时第五个参数sockaddr也是一个二元组(address, port)
In [30]: m = socket.getaddrinfo("www.qq.com", None) In [31]: m //函数返回一个由元组组成的列表 Out[31]: [(2, 1, 6, ‘‘, (‘14.17.32.211‘, 0)), (2, 2, 17, ‘‘, (‘14.17.32.211‘, 0)), (2, 3, 0, ‘‘, (‘14.17.32.211‘, 0)), (2, 1, 6, ‘‘, (‘59.37.96.63‘, 0)), (2, 2, 17, ‘‘, (‘59.37.96.63‘, 0)), (2, 3, 0, ‘‘, (‘59.37.96.63‘, 0)), (2, 1, 6, ‘‘, (‘14.17.42.40‘, 0)), (2, 2, 17, ‘‘, (‘14.17.42.40‘, 0)), (2, 3, 0, ‘‘, (‘14.17.42.40‘, 0)), (10, 1, 6, ‘‘, (‘240e:ff:f040:28::a‘, 0, 0, 0)), (10, 2, 17, ‘‘, (‘240e:ff:f040:28::a‘, 0, 0, 0)), (10, 3, 0, ‘‘, (‘240e:ff:f040:28::a‘, 0, 0, 0))] In [32]: m[4][4] //只选择ip地址 Out[32]: (‘59.37.96.63‘, 0) In [33]: m[4][4][0] //注意这个ip时字符串 Out[33]: ‘59.37.96.63‘
执行反向查询,有ip地址查找响应的主机名:
gethostbyaddr(...) gethostbyaddr(host) -> (name, aliaslist, addresslist) Return the true host name, a list of aliases, and a list of IP addresses, for a host. The host argument is a string giving a host name or IP number.
反向查找的真实性检查:
检查的方法就是首先根据ip查找出一个域名。
然后再根据这个域名查找出一个ip列表。
最后检查你所用ip是否再ip列表里面。
代码域名查找与检测
本文出自 “自定义” 博客,谢绝转载!
标签:python
原文地址:http://zidingyi.blog.51cto.com/10735263/1885792