需求简介
互联网上有很多恶意扫描工具,会冒充常见搜索引擎的user-agent
来扫描目标网站的漏洞。同时,作为站长往往害怕屏蔽恶意IP的时候“误杀”搜索引擎IP。本站随着建站时间逐渐增长,恶意扫描也变得越来越多,所以急需一个方案能够识别那些假冒搜索引擎user-agent
的恶意扫描IP。
技术原理
技术很简单,就是利用nslookup
等命令,检查携带搜索引擎user-agent
的IP,是否真的是搜索引擎的官方IP。百度官方的相关文档:通过反查IP验证百度蜘蛛IP真假
Java验证爬虫IP代码
一、引入所需Jar包
因为在不同的操作系统上,反查IP的命令是不同的,所以最简单的办法是引入一个成熟的Java dns库,这里我们推荐dnsjava
,maven引入代码如下:
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>3.4.2</version>
</dependency>
二、java nslookup反查IP
引入dnsjava
后,我们只需一行代码,即可反查IP对应的name。直接上代码:
public static void main(String[] args) throws Exception {
//真实百度蜘蛛IP
String hostName = Address.getHostName(InetAddress.getByName("220.181.108.75"));
System.out.println(hostName);
//虚假百度蜘蛛IP
hostName = Address.getHostName(InetAddress.getByName("183.188.169.224"));
System.out.println(hostName);
}
上面的代码运行结果如下:
https://baiduspider-220-181-108-75.crawl.baidu.com./
https://224.169.188.183.adsl-pool.sx.cn./
观察结果我们可以发现,真正的百度蜘蛛爬虫的IP,反查结果是可以看到百度的域名的。所以,通过该方法,每当有携带搜索引擎user-agent
的ip访问我们的网站时,都可以通过上述办法反查IP,验证IP是否合法。
考虑到反查IP的耗时相对较长,所以如果要在项目中使用该功能,建议做成异步执行的,避免影响网站响应时间。