java 反查域名_C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)
這里使用了兩個(gè)接口來反查IP,分別是“站長工具”和“愛站”的接口,兩者各有千秋,結(jié)合起來查詢就較為準(zhǔn)確了。
注:我目前只寫了個(gè)初始版本,還不太完善,但是可以基本使用了,代碼中關(guān)鍵地方有注釋,所以我就不多解釋了
算法核心:package?NmapTest;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.io.OutputStream;
import?java.net.HttpURLConnection;
import?java.net.MalformedURLException;
import?java.net.URL;
import?java.util.HashSet;
import?java.util.Set;
import?java.util.regex.Matcher;
import?java.util.regex.Pattern;
public?class?SearchDomainByIP?{
/**
*?IP反查(旁站查詢),綜合兩個(gè)接口的結(jié)果
*?@param?ip?待查IP
*
*?@return?返回結(jié)果集
*?*/
public?Set?getDomains(String?ip){
Set?set?=?new?HashSet();
set?=?getDomainByChinaz(searchDomainByChinaz(ip));??//chinaz接口
try?{
String[]?domainByAiZhan?=?searchDomainByAiZhan(ip,?1,?false).split("?");??//aizhan接口
for(String?s?:?domainByAiZhan){
if(!s.equals(""))
set.add(s);
}
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
return?set;
}
/**
*?使用站長工具的接口,IP反查域名
*?@param?ip?待查IP
*
*?@return?返回包含結(jié)果的字符串
*?*/
private?String?searchDomainByChinaz(String?ip){
try?{
URL?url?=?new?URL("http://s.tool.chinaz.com/same");
HttpURLConnection?connection?=?(HttpURLConnection)?url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",?"application/x-www-form-urlencoded");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
String?str?=?"s="?+?ip;??//POST參數(shù)
OutputStream?outputStream?=?connection.getOutputStream();
outputStream.write(str.getBytes("UTF-8"));
outputStream.flush();??//開始請(qǐng)求
outputStream.close();
//返回?cái)?shù)據(jù)包
if(connection.getResponseCode()?==?200){
InputStream?inputStream?=?connection.getInputStream();
BufferedReader?reader?=?new?BufferedReader(new?InputStreamReader(inputStream));
String?line?=?"";
String?reg?=?"\\s*
- 1.(.*)?";??//匹配到目標(biāo)行
while((line?=?reader.readLine())?!=?null){
if(line.matches(reg)){
inputStream.close();
reader.close();
connection.disconnect();
return?line.replaceFirst("\\s*
- 1.",?"");??//返回包含目標(biāo)的字符串
}
}
}
}?catch?(MalformedURLException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
return?"";
}
/**
*?正則匹配出需要的一個(gè)個(gè)域名
*?@param?data?包含所有結(jié)果的字符串
*
*?@return?目標(biāo)域名的List集合
*?*/
private?Set?getDomainByChinaz(String?data){
String?reg?=?"target=_blank>(.*?)
";??//準(zhǔn)確匹配出查到的域名
Pattern?pattern?=?Pattern.compile(reg);
Matcher?matcher?=?pattern.matcher(data);
Set?set?=?new?HashSet();
while(matcher.find()){
set.add(matcher.group(1));
}
return?set;
}
/**
*?使用愛站網(wǎng)的接口,IP反查域名
*?@param?ip?待查IP
*?@param?currentPage?當(dāng)前頁
*?@param?checkNum?判斷域名總數(shù)是否已獲取
*
*?@return?返回包含結(jié)果的字符串
*?@throws?IOException
*?*/
private?String?searchDomainByAiZhan(String?ip,int?currentPage,boolean?checkNum)?throws?IOException{
URL?url?=?new?URL("http://dns.aizhan.com/"?+?ip?+?"/"?+?currentPage?+"/");
HttpURLConnection?connection?=?(HttpURLConnection)?url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(10000);??//毫秒
connection.setReadTimeout(10000);
InputStream?inputStream?=?connection.getInputStream();
BufferedReader?reader?=?new?BufferedReader(new?InputStreamReader(inputStream));
String?line?=?"";
String?numReg?=?"共有??(\\d*)??個(gè)域名解析到該IP";
String?domainReg?=?"\\s*
\\s*";??//匹配到目標(biāo)行的上一行int?domainNumber?=?0;??//查到的域名總數(shù)
String?domainNames?=?"";??//查到的所有域名的字符串集
boolean?point?=?false;??//從false置為true時(shí),表示已經(jīng)找到目標(biāo)行的上一行了,下一次循環(huán)即可取出目標(biāo)行
Pattern?pattern?=?Pattern.compile(numReg);
Matcher?matcher?=?null;
while((line?=?reader.readLine())?!=?null){
//查域名總數(shù)
if(!checkNum){
matcher?=?pattern.matcher(line);
if(matcher.find()){
domainNumber?=?Integer.valueOf(matcher.group(1));
checkNum?=?true;
}
}
//查域名
if(point){
pattern?=?Pattern.compile("target=\"_blank\">(.*)?");
matcher?=?pattern.matcher(line);
if(matcher.find()){
//System.out.println(matcher.group(1));
domainNames?=?domainNames?+?matcher.group(1)?+?"?";
point?=?false;
}
}
else?if(line.matches(domainReg)){
point?=?true;
}
}
inputStream.close();
reader.close();
connection.disconnect();
//如果當(dāng)前頁下一頁還有內(nèi)容,則進(jìn)行遞歸調(diào)用查詢
if(domainNumber?>?(20?*?currentPage)){
try?{
Thread.sleep(1000);??//線程休息1秒鐘
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
return?domainNames?+?searchDomainByAiZhan(ip,currentPage+1,true);
}
else{
return?domainNames;
}
}
}
調(diào)用測試:package?NmapTest;
import?java.util.HashSet;
import?java.util.Iterator;
import?java.util.Set;
public?class?Domains?{
/**
*?@param?args
*/
public?static?void?main(String[]?args)?{
SearchDomainByIP?searchDomain?=?new?SearchDomainByIP();
Set?set?=?new?HashSet();
set?=?searchDomain.getDomains("162.211.183.152");
Iterator?iterator?=?set.iterator();
System.out.println("一共查到?"?+?set.size()?+?"個(gè)旁站");
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
輸出:
一共查到 55個(gè)旁站
www.anhao.ga
www.3ga.cc
www.xiaotwl.cn
wapfeih.com
www.52zyw.net
lgdyw.pw
xxin888.com
www.hksf-expres.com
www.zbhz.top
yk666.cn
www.mfdhw.cn
danshenwl.com
qq67.cn
gjdc.cc
www.5x2y0.com
www.wz288.com
wapzx.org
85pj.cn
www.txbk.cc
yajie520.com
www.wuyunzhu.top
huanyan520.com
lequk.com
www.ddcd.net
ail.so
3pojie.com
www.hacksg.com
www.yin361.cn
www.wapfeih.com
xg-sfkd.com.cn
www.xuexi47.cn
www.huaxia47.com
wz288.com
www.sucaiziyuan.com
wapsog.com
qm6.cc
www.58dh.cn
hacksg.com
zhuilixiang.com
www.xhhzyw.com
www.360360.pw
www.495o.com
surfs.cn
shineky.cn
www.danshenwl.com
52daizi.com
www.hei-tan.com
xg-sfg.cn
www.qqjudian.com
sucaiziyuan.com
moran.cc
lghk.pw
www.huanyan520.com
hongbao.qq.com.mooyu.pub
lexunc.com
PS:通過IP反查域名本身就沒有確定的算法,因此有誤差再所難免。這也是我使用兩個(gè)不同接口來查詢的意義所在,可以互相彌補(bǔ),使結(jié)果更加精確
(PS:打個(gè)廣告,更多原創(chuàng)文章,盡在我的個(gè)人博客網(wǎng)站:http://www.zifangsky.cn)
- 1.",?"");??//返回包含目標(biāo)的字符串
總結(jié)
以上是生活随笔為你收集整理的java 反查域名_C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java适配器模式 场景_Java设计模
- 下一篇: java连续输入_java – 要求用户