0x00
趁着暑假的功夫,把python初略的学习一遍,最大的感受就是这个语言是我见过的最最好用的语言。尤其是其强大的类库以及简单的语法。
闲来无事,今天我就记录一下我用python写的一个小的IP反查域名的工具。
IP反查就是通过IP地址反向查询出绑定在这个IP上的所有的域名信息(一台服务器可以有多个虚拟主机)。
0x01
思路就是使用网络上的IP反查域名的网站,这里我用的是http://dns.aizhan.com/。通过爬虫将查询结果从网页上提取出来,最后输出到一个html文件中。
使用也很方便,比如你要查询的IP地址是10.10.10.10,那么就提交:http://dns.aizhan.com/?q=10.10.10.10即可。
但是,查询结果不是直接返回,而是使用Ajax动态获取的。这时用firebug找到对应的接口就行了。
第一个url是拿到一个总的查询结果(json),其他的url都是获取域名的title。这样,所要做的只有两个事儿:
第一是从json中提取出本页所有的url
第二是根据url的列表找出每个url对应的title
上图就是一个域名对应一个title,只需将这两个信息作为数据元即可。
0x03
有了以上的分析基础,就可以直接看我的代码了。
#coding=utf-8
'''
IP反查小工具
http://dns.aizhan.com/index.php?r=index/domains&ip=202.203.208.8&page=1&_=1408264478284
'''
import requests,json,urllib,sys,os
from bs4 import BeautifulSoup
#获取页面内容
def getPage(ip,page):
r = requests.get("http://dns.aizhan.com/index.php?r=index/domains&ip=%s&page=%d" % (ip,page))
return r
#获取最大的页数
def getMaxPage(ip):
r = getPage(ip,1)
json_data = {}
json_data = r.json()
maxcount = json_data[u'conut']
maxpage = int(int(maxcount)/20) + 1
return maxpage
#获取域名列表
def getDomainsList(ip):
maxpage = getMaxPage(ip)
result = []
for x in xrange(1,maxpage+1):
r = getPage(ip,x)
result.append(r.json()[u"domains"])
return result
#获取最终结果,形式:{url title} 并写入文件中
def getResultWithTitle(filepath,domain_list):
f = open(filepath,"a")
res_dict = {'domain':'','title':''}
res_list = []
f.write('<html>')
for x in domain_list:
for i in xrange(0,len(x)):
title = urllib.urlopen("http://dns.aizhan.com/index.php?r=index/title&id=%d&url=%s" % (i,x[i])).read()
soup = BeautifulSoup(title)
res_dict['domain'] = x[i]
res_dict['title'] = soup.contents[0].encode('utf-8')
f.write('<a href='+str(res_dict['domain'])+'>'+str(res_dict['domain'])+'</a>\t\t'+str(res_dict['title'])+'<br/>')
res_list.append(res_dict)
f.write('</html>')
f.close()
return res_list
if __name__ == "__main__":
if len(sys.argv) < 3:
print "Usage:reverseIP targetIP Outfile"
else:
ip = str(sys.argv[1])
outfile = str(sys.argv[2])
if not str(os.path.basename(outfile)).split('.')[-1] == 'html':
print "The outfile must end with '.html' "
else:
print "The target IP is :%s" % ip
print "Starting, please wait..."
domainList = getDomainsList(ip)
getResultWithTitle(outfile,domainList)
print "Success! The path of result file is %s" % outfile
0x04
以上代码我已经执行通过,效果如下:
看来好好利用 python,确实可以轻易解决不少问题。
今天的文章使用python实现IP反查域名分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12464.html