使用必应查询接口开发搜索工具:反查一个IP上的旁站

前言:必应提供了“Bing Search API”,免费版的一个月可以查询5000次,我们可以通过调用这个API方便的使用必应的查询服务。其中“K8_C段旁注查询工具V2.0”就使用到了这个API,接下来我将详细说明在Java中如何使用这个API

一 API申请

申请地址:https://datamarket.azure.com/dataset/bing/search

当然首先要进行登陆,没有账号的话就注册一个,但是需要注意的是“国家/地区”这个地方最好别填中国大陆,填香港,台湾或者其他国家都行。

订阅的时候选择第一个就行,因为一般情况下1个月查询5000次已经够用了

订阅完成后,点击“我的账户”,把“主帐户密钥”给记下来,待会要用

二 使用之前需要了解的简单概念

这里我推荐一个官网提供的调试页面:https://datamarket.azure.com/dataset/explore/bing/search

使用这个API主要需要注意以下几点:

(1)请求URL:https://api.datamarket.azure.com/Bing/Search/v1/Web

(2)几个常用参数:

i)Query 表示需要查询的内容,这里由于我们是要查一个IP上的网站,因此应该是:ip:IPName,比如:Query=’ip:180.97.161.184′

ii)$format=json 表示返回的数据格式是json

iii)$top=100 每页最多显示100条记录

iiii)$skip 表示从第几条记录开始查询,相当于翻页,查询第几页,需要和$top结合起来使用

(3)调用这个API需要使用“主帐户密钥”进行认证

Java中是这样设置的:

private String sAuth = "";  //认证
this.sAuth = "Basic " + Base64.encodeBase64String((":" + AppId).getBytes());  //认证信息
connection.setRequestProperty("Authorization", sAuth);

注:这里进行Base64加密用到了commons-codec-1.9.jar,可以去官网下载,也可以使用我这个

百度云盘链接:http://pan.baidu.com/s/1kUcGPQB

三 测试代码

package whois;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.codec.binary.Base64;

public class BingDemo {
	private String sAuth = "";  //认证
	private String query = "";  //查询旁站

	public BingDemo(String AppId,String ip) {
		this.sAuth = "Basic " + Base64.encodeBase64String((":" + AppId).getBytes());  //认证信息
		this.query = "Query=‘ip:" + ip + "‘";
	}

	public static void main(String[] args) {
		String AppId = "你的主账户秘钥";  //API Key
		BingDemo bingDemo = new BingDemo(AppId, "180.97.161.184");

		Set<String> set = new LinkedHashSet<String>();
		set = bingDemo.searchDomainByBing();

		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
	}

	/**
	 * 通过必应的接口查询一个IP的旁站(已去重)
	 * 
	 * @return LinkedHashSet<String>类型的集合
	 * 
	 * */
	public Set<String> searchDomainByBing(){
		Set<String> set = new LinkedHashSet<String>();  //查到的域名的有序集合
		String domains = searchDomains(0);
		String[] domainsByBing = domains.split(" ");
		for(String s : domainsByBing){
			if(!"".equals(s)){
				set.add(s);
			}
		}
		return set;
	}

	/**
	 * 通过必应的接口查询一个IP的旁站的一页结果
	 * 
	 * @param skip 页数标志,每增加100相当于翻一页
	 * 
	 * @return 查到的所有结果的字符串合集(未去重)
	 * */
	public String searchDomains(int skip){
		String displayUrl = "";  //最后的域名合集
		try {
			URL url = new URL("https://api.datamarket.azure.com/Bing/Search/v1/Web?" + query 
					+ "&$format=json" + "&$top=100" + "&$skip=" + skip);
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
			connection.setRequestMethod("GET");
			connection.setConnectTimeout(10000);  //毫秒
			connection.setReadTimeout(10000);

			connection.setRequestProperty("Authorization", sAuth);

			InputStream inputStream = new BufferedInputStream(connection.getInputStream());
			BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
			String line = "";
			String reg = "\"DisplayUrl\":\"(([a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+)/?.*?)?\",\"Url\":";
			Pattern pattern = Pattern.compile(reg);
			Matcher matcher;
			while((line = reader.readLine()) != null){
				matcher = pattern.matcher(line);
				while(matcher.find()){
					displayUrl = displayUrl + matcher.group(2) + " ";
//					System.out.println(displayUrl);
				}
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//说明上一页就已经结束了
		if("".equals(displayUrl))
			return displayUrl;
		//继续查询下一页
		else{
			return displayUrl + searchDomains(skip + 100);
		}

	}

}

四 测试结果

时间: 2024-12-13 23:29:53

使用必应查询接口开发搜索工具:反查一个IP上的旁站的相关文章

C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)

这里使用了两个接口来反查IP,分别是"站长工具"和"爱站"的接口,两者各有千秋,结合起来查询就较为准确了. 注:我目前只写了个初始版本,还不太完善,但是可以基本使用了,代码中关键地方有注释,所以我就不多解释了 算法核心: package NmapTest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.Inpu

C# 接口开发小工具 笔记

做了2年的接口开发,主要给移动端提供接口,整理了一套小工具,在这里记录一下. 1.非空字段检测 接口某些字段不能为空,最开始进行空值检测是在方法里面,一个参数一个参数手动的检测是否为空,某些方法非空字段十几个的时候,代码臃肿,看着恶心,写着也烦,于是就利用特性和反射实现了自动空值检测. //特性声明 [AttributeUsage(AttributeTargets.Property)] public class NotNull : Attribute { } //使用方式 public clas

网贷查询接口开发 网贷黑名单查询 个人网贷黑名单查询

给一个客户开发网贷查询的.然后顺便看了下目前业界的玩法,基本都是找到一些上级公司,拿到大数据查询接口,然后自己包装订制开发. 下面是我在开发的过程中调用的一些接口.php的.都是找这样的公司拿到appid或者appcode等信息,然后联调他们的数据,获取到数据以后,自己做成h5页面展示出来就可以了. $host = "https://blanklist.shumaidata.com"; $path = "/blacklist/check"; $method = &q

ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据

ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ————————————————————————————————————— ZeroMQ 官方地址:http://api.zeromq.org/4-1:zmq-send-const zmq_send_const(3)           ØMQ Manual - ØMQ/4.1.0 Name zmq_send_const – 从一个socket上发送一个固定内存数据

ZeroMQ接口函数之 :zmq_sendmsg – 从一个socket上发送一个消息帧

ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-sendmsg zmq_sendmsg(3)        ØMQ Manual - ØMQ/4.1.0 Name zmq_sendmsg – 从一个socket上发送一个消息帧 Synopsis int zmq_sendmsg (void *socket, zmq_msg_t *msg, int flags); Description zmq_sendmsg()函数会把msg参数指定的消息对象添加到socke

ZeroMQ接口函数之 :zmq_recv – 从一个socket上接收一个消息帧

ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_recv zmq_recv(3)        ØMQ Manual - ØMQ/4.1.0 Name zmq_recv – 从一个socket上接收一个消息帧 Synopsis int zmq_recv (void *socket, void *buf, size_t len, int flags); Description zmq_recv()函数会从socket参数指定的socket上接收一个消息,并把这

chrome开发人员工具中出现绿色的矩形框解决

1.问题 web开发是离不开chrome浏览器的开发人员工具的,但是几天前我的开发人员工具突然会在页面上显示一些绿色的框,而且随着鼠标的移动一闪一闪的特别刺眼,简直就是<闪瞎你的狗眼>,如图: 2.解决: 百思不得其解,最后发现是自己不小心给设置了,渲染的时候会闪现渲染矩形<show paint rectangles>,设置的地方如图:

微信公众平台消息接口开发(32)空气质量指数查询

原文:微信公众平台消息接口开发(32)空气质量指数查询 微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 空气质量指数 PM2.5 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archive/2013/05/30/weixin-if32-air-quality.html 一.获取原版数据 在中国环境监测总站http://www.cnemc.cn/ 可以找到全国城市空气质量实时发布平台,其地址为 http://113.108.142.147:20

微信公众平台消息接口开发 彩票查询

一.获取数据 目前很多网站都提供彩票信息查询,所以取得彩票数据是件很容易的事.方倍工作室开发出彩票查询接口 API,目前已开通'双色球','3D','七乐彩','大乐透','七星彩','排列3','排列5','胜负彩','六场半全场','四场进球' 10种数据,每日同步更新 使用方式为直接在URL中提交彩票名称即可,名称需要先做urlencode调用url方法:以下是调用双色球方法 http://api2.sinaapp.com/search/lottery/?appkey=0020130430