首页 > 代码库 > 在python中使用域名查询

在python中使用域名查询

  1. 执行基本查询

    最基本的查询就是正向查询,它根据一个主机名来查找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中使用域名查询