分享好友 系统运维首页 频道列表

真假百度蜘蛛的甄别

Linux系统  2017-02-05 18:120

虽然百度的口碑并不好,但是不可否认的是,它一直是中文搜索中的霸主,所以对大多数中小型商业公司而言,都对百度蜘蛛的抓取行为予以放行,不过还有很多非法的蜘蛛,它们会通过 User-Agent 把自己伪装成百度蜘蛛,此时如果单纯以 User-Agent 来判断是否是百度蜘蛛就不合适了。虽然网上能找到很多现成的百度蜘蛛 IP 段,但是并不能确认它们的准确性,所以我打算自己收集,进而甄别真假百度蜘蛛。

实际上百度在 常见问题解答 中给出了甄别的方法:当有 User-Agent 是 Baiduspider 的请求时,我们可以通过 host 命令反解 ip 来判断,Baiduspider 的 hostname 以 *.baidu.com 或 *.baidu.jp 的格式命名,其它的则可以视为非法的蜘蛛。

注意:有的百度蜘蛛服务器并不遵守此规则,本案例中无视它们。

为什么百度不主动公布它自己的 IP 段呢?这样大家就方便了啊!答案多半是因为它怕别人封禁它,正所谓君子坦荡荡,小人常戚戚。比如 AWS 就公布了自己的 IP 段。

下面我们将尝试通过 log 历史数据来找出真正的百度蜘蛛,假设 log 格式如下;

1.2.3.4 … “Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)”

简单 shell 即可实现,通过分析我的 log,最终可以拿到几百个百度蜘蛛的 IP:

shell> awk '$0 ~ "Baiduspider" {print $1}' /path/to/log \
    | xargs -n1 -I {} sh -c 'echo -en {} "\t"; host {}' \
    | awk '$NF ~ "\\.baidu\\.(com|jp)\\.$" {print $1}' > baidu

123.125.71.100
123.125.71.101
123.125.71.102
123.125.71.103
123.125.71.104
123.125.71.105
...

因为结果集太臃肿了,所以我拍脑袋做了一个 24 位的 CIDR 处理:

shell> awk -F. -v OFS=. '{print $1, $2, $3, "0/24"}' baidu | sort -u

119.63.195.0/24
119.63.198.0/24
123.125.66.0/24
123.125.71.0/24
180.76.15.0/24
180.76.5.0/24
220.181.108.0/24

如此结果集就精简多了,以后再有 User-Agent 是 Baiduspider 的请求进来时,我们只要简单判断一下 IP 是否在 CIDR 结果中即可,是则予以放行。当然,本文中百度蜘蛛的 IP 数据也可以用在别的地方,比如禁止百度访问。

查看更多关于【Linux系统】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
每天一条linux命令——halt
halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 语法:halt(选项)选项:-d:不要在wtmp中记录;-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;-i:

0评论2023-02-10470

几个linux命令查看堆栈内存问题 几个linux命令查看堆栈内存问题怎么解决
  公司编写代码,发现整个在程序里面调用system时候总是失败,原因是can't allocate memory ,根本原因不是内存不足,而是堆栈内存不够。使用ulimit -s 2048后有所好转但是发现一旦系统进程开启多了后仍然会挂。后来使用objdump -x 后发现了原因有个动态库

0评论2023-02-09953

Linux命令总结--rm命令 linux的rmp命令
(来源于http://www.cnblogs.com/xqzt/p/5398919.html)1、命令简介rm(Remove file 删除目录或文件)删除文件,对于链接文件,只是删除整个链接文件,而原有文件保持不变。新手在删除文件之前一定要知道这些:很重要1.可以用mv代替rm的绝对不要用rm,不要着急

0评论2023-02-09320

Linux命令行批量创建目录详解 linux创建目录
以前一直用-p创建目录链,觉得很方便了。在空目录/opt/app/myapp里创建src,再创建main,再创建javamkdir -p /opt/app/myapp/src/main/java没想到还可以这样玩##¥%……*(root@vm1:~/tmp# mkdir -p src/{{main,test}/{java,resources},main/webapp}root@vm1:

0评论2023-02-09819

Linux命令之乐--script和scriptplay
script和scriptplay可以把终端会话记录到一个文件中,可以用来制作命令行教学视屏。 开始录制会话[root@new test]# script -t 2timing.log -a output.sessionScript started, file is output.session[root@new test]# echo hellohello[root@new test]# echo

0评论2023-02-09430

java 开发常用的Linux命令
1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。find . -name "*.xml" 递归查找所有的xml文件find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件grep -H 'spring' *.xml 查找所

0评论2023-02-09390

常用Linux命令整理 Linux常用命令总结
常用Linux命令整理常见系统命令export 查看或修改环境变量# 例:临时修改命令提示符为字符串$export PS1=$# 例:临时修改命令提示符显示系统时间 时间使用\t 表示export PS1="[\u@\h \t \W]\$"man 查看linux系统的手册# 例:查看ls命令如何使用man ls # 回车

0评论2023-02-09592

Linux命令行查看cpu(lm_sensors)和显卡温度(nvidia-smi)的操作方法
Linux命令行如何查看cpu和显卡温度lm_sensors,是一款基于linux系统的硬件监控的软件。可以监控主板,CPU的工作电压,温度等数据。实际上sensors命令只是读取了/sys/class/hwmon/目录下关于CPU等传感器温度参数并直观的展示给我们,我们不安装lm_sensors模块

0评论2023-02-07382

Linux命令行循环执行shell命令 linux shell命令行
目录Linux命令行,循环执行shell命令死循环命令格式效果普通计数循环循环10次效果Linux shell循环命令 while死循环的用法Linux命令行,循环执行shell命令死循环命令格式while true ;do command; done;可以将 command 替换为任意命令。下面以echo “hello”; s

0评论2023-02-07705

通过Golang实现linux命令ls命令(命令行工具构建)
目录ls 命令os.Args 读取参数pflag小结ls 命令要实现ls,首先先我们复习一下ls命令。ls不加任何参数,表示查询当前目录下的文件/文件夹ls后面加上路径,列出所有,不包含隐藏文件/文件夹ls -a列出所有,包括以.开头的隐藏文件此命令还有很多功能,这一节的重

0评论2023-02-07529

?第五周作业
1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;[root@localhost ~]# grep-E ^[[:space:]]+ /boot/grub/grub.conf root (hd0,0)kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_L

0评论2017-02-05452

Linux查找find命令详解
Linux查找–find命令首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!find命令的格式findpathname-options[ -print -exec -ok ...]pathname #是find命令所查找的目录路径,例如.表示当前目录,/表示根目录-print #表示find命令将匹配的文件输出到标准输出

0评论2017-02-05352

更多推荐