Python实现动态域名解析----准备篇(一)

Python019

Python实现动态域名解析----准备篇(一),第1张

开一篇新文集,最终实现目标:动态域名解析,,,原因是用宝塔面板里的动态域名解析需要5块钱一个月,,,本着能不花钱就不花钱的原则自行解决动态域名解析问题。

众所周知由于运营商的IP数量限制,申请了公网IP的人虽然是公网IP但是为了保证使用,这个IP地址就会经常不定时变更,那么就需要重新解析域名,这就造成了非常麻烦的操作,那么DDNS就是为了解决这个问题而生

本文一篇可能写不完所以分几小篇进行实现,第一篇先解决准备问题。

至此准备工作已准备完成,下一篇将自己搭建IP请求接口

import sys

import 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服务器,这样解析域名就准确了。