使用python实现IP反查域名

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,确实可以轻易解决不少问题。




©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页