网络机器人的识别与攻防的经典案例

本文我们介绍一个网络机器人的识别与攻防的经典案例(也即爬虫与反爬虫的经典案例)。使用到的代码superword项目:

我们的目的是要使用机器人自动获取站点http://ip.qiaodm.com/ 和站点http://proxy.goubanjia.com/ 的免费高速HTTP代理IP和端口号。

不过他们未对机器人进行识别,如通过如下代码就可以获取网页内容:

[java] view plain copy public static void main(String[] args) {
try {
String url = "http://proxy.goubanjia.com/";
HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
connection.setUseCaches(false);
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder html = new StringBuilder();
String line = null;
while ((line=reader.readLine()) != null){
html.append(line);
}
LOGGER.info("HTML:"+html);
}catch (Exception e){
LOGGER.error(e.getMessage());
}
}
尽管如此,但是他们却考虑到了机器人的防范,通过分析发现,两个站点的防范措施是一致的,所以破一得二。

他们是如何防范的呢?我们看看IP:163.125.217.56和端口:9797,我们利用FIREFOX的FIREBUG插件进行分析,如下图所示:

这里,如果我们直接调用选中的td节点的Jsoup的Element的text()方法,那么得到的值就会是 16363.1.125 25.21717.5.5,而不是我们在页面上看到的IP:163.125.217.56,还有


忽略空文本
2、原始HTML:
忽略不显示的文本:61
3、原始HTML: 61
需要的文本:61
4、原始HTML:
.

需要的文本:.
5、原始HTML:

忽略空文本
6、原始HTML:
忽略空文本
7、原始HTML:

18


忽略不显示的文本:18
8、原始HTML: 18
需要的文本:18
9、原始HTML:
5.

需要的文本:5.
10、原始HTML:

1


忽略不显示的文本:1
11、原始HTML: 1
需要的文本:1
12、原始HTML:
49

需要的文本:49
13、原始HTML:
忽略不显示的文本:.1
14、原始HTML: .1
需要的文本:.1
15、原始HTML:

忽略空文本
16、原始HTML: 63

需要的文本:63

解析到的ip: 61.185.149.163

下面是通过上面的分析程序获取到的部分能隐藏自己IP的代理服务器IP和端口号:

[xml] view plain copy 124.88.67.33:81
183.207.224.13:80
111.161.126.101:80
183.207.228.51:80
123.138.184.228:80
120.131.128.212:85
111.12.251.199:80
111.1.36.6:80
111.206.86.76:80
120.198.243.111:80
222.138.229.17:8104
123.125.104.240:80
124.88.67.25:81
202.102.22.182:80
183.207.228.114:80
162.208.49.45:8089
183.207.228.116:80
120.192.249.74:80
124.202.177.26:8118
124.88.67.32:80
111.161.126.100:80
183.207.224.14:80
183.207.224.43:80
111.206.81.248:80
183.207.224.45:80
182.118.31.110:80
124.88.67.53:80
111.13.109.52:80
190.38.26.167:8080
118.26.183.43:80
101.226.249.237:80
202.108.50.75:82
202.106.16.36:3128
111.1.36.133:80
124.88.67.24:80
有了这些IP和端口号,我们在JAVA中如何使用呢?只需要设置系统属性即可。

[java] view plain copy System.setProperty("proxySet", "true");
System.setProperty("http.proxyHost", ip);
System.setProperty("http.proxyPort", port);
设置完系统属性之后,我们如何判断有没有生效呢?我们可以通过看看在ip138的眼中,自己的IP是多少,然后和自己之前的IP作比较,看是否发生变化,如果发生变化,则认为我们的代理成功为我们向外部隐藏了自己的真实IP。

如何从ip138获取自己的外部地址呢?看如下代码:

[java] view plain copy public static String getCurrentIp(){
try {
String url = "http://1111.ip138.com/ic.asp?timestamp="+System.nanoTime();
String text = Jsoup.connect(url)
.header("Accept", ACCEPT)
.header("Accept-Encoding", ENCODING)
.header("Accept-Language", LANGUAGE)
.header("Connection", CONNECTION)
.header("Host", "1111.ip138.com")
.header("Referer", "http://ip138.com/")
.header("User-Agent", USERAGENT) .ignoreContentType(true) .timeout(5000) .get() .text(); LOGGER.info("检查自身IP地址:"+text); Matcher matcher = IPPATTERN.matcher(text);
if(matcher.find()){
String ip = matcher.group();
LOGGER.info("自身IP地址:"+ip);
return ip;
}
}catch (Exception e){
LOGGER.error(e.getMessage());
}
LOGGER.info("检查自身IP地址失败,返回之前的IP地址:"+ previousIp);
return previousIp;
}
最后看看程序运行的部分截图如下:

[xml] view plain copy 尝试使用新的代理:186.91.60.155:8080
检查自身IP地址:您的IP地址 您的IP是:[186.91.60.155] 来自:委内瑞拉
自身IP地址:186.91.60.155
Thread[main,5,main]自动更换代理成功!
Thread[main,5,main]更换代理耗时:4025毫秒
将66条代理IP地址写入本地
将81条能隐藏自己的代理IP地址写入本地
将108条不能隐藏自己的代理IP地址写入本地
Thread[main,5,main]请求重新更换代理
Thread[main,5,main]开始重新更换代理
尝试使用新的代理:117.158.98.214:80
检查自身IP地址:您的IP地址 您的IP是:[117.158.98.214] 来自:河南省许昌市 移动
自身IP地址:117.158.98.214
Thread[main,5,main]自动更换代理成功!
Thread[main,5,main]更换代理耗时:176毫秒
将66条代理IP地址写入本地
将81条能隐藏自己的代理IP地址写入本地
将108条不能隐藏自己的代理IP地址写入本地
Thread[main,5,main]请求重新更换代理
Thread[main,5,main]开始重新更换代理
尝试使用新的代理:120.131.128.212:85
检查自身IP地址:您的IP地址 您的IP是:[111.200.10.82] 来自:北京市 联通
自身IP地址:111.200.10.82
Thread[main,5,main]自动更换代理成功!
Thread[main,5,main]更换代理耗时:240毫秒
将66条代理IP地址写入本地
将81条能隐藏自己的代理IP地址写入本地
将108条不能隐藏自己的代理IP地址写入本地

作者:yiming2016.10.26
首页 >> 岂安动态
Tags >> 岂安招聘 <> 无埋点 | 薅羊毛 | 羊毛党 | 刷单 | 业务安全 | 红利猎人 | 处置策略 | 验证码安全
爬虫 >> 反爬虫 <> 解决初级爬虫 | 互联网反爬虫 | 反爬虫四种策略 | 反爬虫思路 | 反爬虫策略 | 实时反爬虫 | 反爬虫战争 | 开源爬虫