众所周知由于运营商的IP数量限制,申请了公网IP的人虽然是公网IP但是为了保证使用,这个IP地址就会经常不定时变更,那么就需要重新解析域名,这就造成了非常麻烦的操作,那么DDNS就是为了解决这个问题而生
本文一篇可能写不完所以分几小篇进行实现,第一篇先解决准备问题。
至此准备工作已准备完成,下一篇将自己搭建IP请求接口
import sysimport socket
import dns.resolver
print 'Argument List:', str(sys.argv)
site = sys.argv[1]
dns_server = sys.argv[2]
# Basic CNAME query the host's DNS
for rdata in dns.resolver.query(site, 'CNAME') :
print rdata.target
# Basic A query the host's DNS
for rdata in dns.resolver.query(site, 'A') :
print rdata.address
###下边是制定dns解析的服务器设置
# Setting an specific DNS Server
resolver = dns.resolver.Resolver()
resolver.nameservers = [socket.gethostbyname(dns_server)]
# Basic CNAME query with the specific DNS server
answer = resolver.query(site, 'CNAME')
for rdata in answer :
print rdata.target
# Basic A query with the specific DNS server
answer = resolver.query(site, 'A')
for rdata in answer :
print rdata.address
To run:(命令执行)
python dnsdig.py www.youtube.com 8.8.8.8
这种方法为从urlparse模块中通过urlparse方法提取url通过hostname属性获取当前url的域名。
此方法是通过urllib模块中splittype方法先从url中获取到proto协议及rest结果,然后通过splithost从rest中获取到host及rest结果,此时host为域名。(rest被分割了两次)如下图:
此方法为从sokcet模块中获取到gethostbyname方法将域名传递进去就能解析出域名的ip。
此方法为通过nslookup获取域名的ip。
以上从域名中提取ip会不准确,需要设置DNS服务器,这样解析域名就准确了。