1. 程式人生 > >使用python實現IP反查域名

使用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,確實可以輕易解決不少問題。

相關推薦

使用python實現IP域名

0x00 趁著暑假的功夫,把python初略的學習一遍,最大的感受就是這個語言是我見過的最最好用的語言。尤其是其強大的類庫以及簡單的語法。 閒來無事,今天我就記錄一下我用python寫的一個小的IP反查域名的工具。 IP反查就是通過IP地址反向查詢出繫結在這個IP上的所有的

window下利用ip域名與利用域名ip

一、已知IP地址查對應的域名:       nslookup x.x.x.x(IP地址)---即可檢視對應的域名; 二、已知域名查對應的IP地址:       ping   對應的域名----

遞歸:python 實現2分

search n) arch pytho elif range int 查找 ear 2分查找 def data_search(n,m): mid = int(len(n)/2) if len(n)>=1: if n[mid]>m:

python實現二分叉

python二分叉*二分叉查找就是折半查找 比如12345這幾個數字當中找2,他會先找到這五個數字中的中堅的那個與2進行比較,比如中間的3》2他就認為3以後的不用查找了,然後查找3左邊的,即123,再把這個分半,然後中堅為2,2=2 即找到其實代碼也就是這個思路,只不過這個裏邊添加了遞歸調用函數。 說一下遇

python實現增刪改電話本程式筆記

import json class Person(): def init(self,name,tel): self.name=name self.tel=tel r=open(“notebook.json”,‘rb’) d=json.load® while True: action=inpu

二叉找樹python實現

treenode pri one val name turn 是否 find pan 1. 二叉查找樹的定義: 左子樹不為空的時候。左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點。左右子樹分別為二叉查找樹 2. 二叉查找樹的最左邊的結點即為最小值,要

[python] 用pickle模塊實現“增刪改”的簡易功能

python pyckle模塊 #!/usr/bin/env python2 #coding:utf-8 """ pickle的作用: 1:pickle.dump(dict,file)把字典轉為二進制存入文件. 2:pickle.load(file)把文件二進制內容轉為字典. """ im

Python實現經典找算法

python 查找1.二分查找:Note:二分查找列表必須是有序的def binary_search(find, _list): # 二分查找 sindex = 0 eindex = len(_list) while sindex < eindex: mid = (sindex

python實現有道詞典

int 會有 都是 不同 正則 down 利用 list 指向 因為要考英語四級,所以我今天一大早就起來被英語單詞,但是作為英語渣渣的我,只能是在網頁上挨個查單詞的意思。查的多了,心生厭倦,便想著如何才能在終端下查單詞,那樣速度不就很快了?

python操作mysql數據庫實現增刪改

mysqldb參考http://www.cnpythoner.com/wiki/string.htmlhttp://395469372.blog.51cto.com/1150982/1748120http://www.jianshu.com/p/1d09d14976d7http://ju.outofmemor

python實現二分

name false 如果 pan color 代碼 速度 span print 二分法查找:在一組有序的數據中進行查找,首先與中間的數先比較,如果查找的數大於中間的數,則要查找的數在前半段,否則在後半段,這樣就會排除一半的數據,如此遞歸進行下去,則會極大的提高查找的速度。

利用python實現批量查詢ip地址歸屬地址

proc shadow 手動 color sys copy lis rip image 今天需要查詢nginx訪問的客戶端ip是否和調度一樣!先是用shell把文件中的ip截取出來: python腳本如下:(哈哈,新手寫的很草率)#!/usr/bin/env#-- codi

算法:IP分割問題(python實現

今天群裏有個朋友出了個題,是一家公司的面試題,題目如下(補充:對於ip0開頭的也是無效的,如分割後001.1.1.1這種是不可以的):   分析:這裏我們舉一個最簡單的例子1.1.1.12.2.2.2。首先能想到的解決方法肯定是使用循環了,我們可以寫2個循環嵌套(有點像冒泡排序)從第0個位置截取1個,從

信息收集之域名IP

域名轉IP目的 Linux下通過shell終端查詢某域名的IP地址、通過IP地址查詢綁定的域名。並 整理返回結果,創建python工具。 環境 linux + 命令行 工具 1. ping 2. host 3. dig 4. nslookup 工具一:PING --- 簡單粗暴 使用ping命令發送一

python實現員工信息表增刪改

python實現員工信息表增刪改查 python實現員工信息表 員工信息表增刪改查 增刪改查 程序說明:模擬實現sql語句的增刪改查關鍵是怎麽去實現這個事情,從哪兒下手,網上的代碼挺多的,這個比較好,最好自己畫一個流程圖,這樣寫起來就比較方便,自己寫了一遍代碼,有問題的可以聯系,剛開始學習py

常見的找算法的原理及python實現

put arch img 字典 python實現 需要 技術 () one 順序查找 二分查找 練習 一、順序查找 data=[1,3,4,5,6] value=1 def linear_search(data,value): flag=False

python +ip2region IP庫地址文件實現秒級查詢1萬不同ip歸屬地址

python +ip2region一、服務器環境介紹: 服務器硬件:4核4g內存服務器系統:centos6.9 x86_64位最小化安裝 二、環境安裝 參考地址:https://github.com/lionsoul2014/ip2region直接下載包到服務器上的/root目錄下wget https://g

python實現

name 字典 list clas nod node 大小 保存 lis class UnionFindSet(object): """並查表""" def __init__(self, data_list): """初始化兩個字典

python實現mongodb的增刪改

pmd xxx rsn rpm vfat uwa paul dpf wdf python實現mongodb的增刪改查環境:192.168.122.1 pytho

python實現切換代理ip

大量的處理爬蟲的時候,IP地址容易被封掉,這個時候可以使用代理IP來幫助完成接下來的任務了 使用Requests模組來完成請求,程式碼如下: import urllib.requestimport requests url = "http://pv.sohu.com/cityjson?ie=utf-8"