使用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"