用shell脚本收集查询IP信息的网站

Curl是Linux下一个很强大的http命令行工具,其功能十分强大。


支持多种协议,包括FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET等。


最简单的用法:

抓取www.cnbeta.com的源码并显示

[root@club shell]# curl www.cnbeta.com  


本脚本进行过滤提取curl抓取的html源码中的信息,将信息进行处理。


curl支持很多选项,-i:只查看http头部信息,-o:将获取的结果保存在一个文件中


这里不全部列出了,更详细的介绍可以参见此博文:http://blog.51yip.com/linux/1049.html,或者man curl


本脚本功能:

实现收集可以查询IP的网站,并将网站的域名,IP地址,和物理地址存储显示出来。


最终效果:

收集网页中:


收集结束后:



脚本和注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash
#使用方式:脚本后面提供一个搜索引擎关键词,用来搜索可以查IP的网站,比如 “IP”、“IP查询” 等关键词
#
#判断参数是否为空,为空则提示加参数,然后退出脚本
[ -z $1 ] && echo "you must give a keyword" && exit 4
clear
#此变量存储当前检测第几个网页
STEP=1
#此变量存储搜索关键词,是脚本传递进来的值
KEYWORD=$1
#如果当前目录存在info.txt则删除这个文件
[ -e info.txt ] && rm -rf info.txt
echo "获取本机公网地址中。。。。"
#此循环用来获取公网地址,如果获取不到则显示获取失败,并再次进行获取,如何获取到则退出循环。
while true ; do
#用curl访问http://ip.chinaz.com页面,提取出公网IP地址。
MYIPADDR=`curl "http://ip.chinaz.com/" 2> /dev/null | grep "您的IP:" | awk -F 'strong|>|<' '{print $6}' `
if [ -z $MYIPADDR ]; then
echo "获取公网地址失败"
else
echo "本机公网地址:$MYIPADDR"
break
fi
done
#先定义此变量,用来存储当前搜索页面的最后一个页码
FINPAGE=1
#此变量存储搜索页码
PN=1
#当前搜索页小于等于当前搜索页的最后一个页码时,则进入循环。
while [ $PN - le $FINPAGE ]; do
#显示当前第几个搜索页。
echo -e "\033[34;1m当前第$PN搜索页\033[0m\n"
#用的是360的搜索引擎,因为百度的源码是压缩过的,提取字符比较困难。www.so.com/s?q=$KEYWORD&pn=$PN 这个url中,q=后面是搜索词,pn=后面是搜索结果的页码。分析一下360的搜索页就能看出。
#用grep和awk提取出当前页面的最后一个页码。
FINPAGE=`curl "www.so.com/s?q=$KEYWORD&pn=$PN&j=0" 2> /dev/null | grep '<strong>' | awk -F '<strong>|</strong>' '{print $2}' `
echo "遍历当前搜索页可能页面的地址。。。"
#提取出当前搜索页结果的所有网页地址。保存在WEBLIST变量中。
WEBLIST=`curl "http://www.so.com/s?q=$KEYWORD&pn=$PN&j=0" 2> /dev/null | grep "</h3>" | awk -F 'href=' '{print $2}' | cut -d '"' -f2`
echo -e "遍历完成。。。开始筛选符合条件的网页。。。\n"
#遍历当前搜索页的每个网页,分析网页中的内容。
for i in ` echo $WEBLIST`; do
#打印相关信息。
echo -e "当前检测第\033[33;1m$STEP\033[0m个网页,当前搜索页一共有`echo -e $WEBLIST | awk '{print NF}'`个网页"
#用curl抓取当前网页的内容,匹配一下自己的公网地址。
curl -m 5 $i 2> /dev/null | grep $MYIPADDR > /dev/null
#如果匹配到,说明此网站可以查询IP地址信息。
if [ $? - eq 0 ]; then
echo -e "\033[32;1m$i 符合,此网站可以查询IP信息\033[0m"
#提取当前网页的域名,保存在DONAME变量中。
DONAME=` echo "$i" | sed 's#^http://\(.*\)/*$#\1#g' | cut -d/ -f1`
#用ping命令去解析此域名本地dns解析出来的IP地址,也就是这个可以查询IP地址信息网站的IP地址,保存在WEBIPADDR变量中
WEBIPADDR=` ping -c 1 -w 1 $DONAME | cut -d/ -f1 | head -1 | awk -F '(' '{print $2}' | cut -d ')' -f1`
#用curl在http://ip.chinaz.com上解析出此网站IP的物理地址。保存在PHYADD变量中。
PHYADD=`curl "http://ip.chinaz.com/?IP=$WEBIPADDR" 2> /dev/null | grep -A 1 '<span id="status" class="info1">' | tail -1 | awk -F '==>>' '{print $NF}' | cut -d '<' -f1`
#将相关信息保存在info.txt中
echo -e "$DONAME\t\t\t--\t\t\t$WEBIPADDR\t\t--\t\t$PHYADD" >> info.txt
else
echo -e "\033[31;1m$i 此网站pass\033[0m"
fi
let STEP+=1
done
let PN+=1
let FINPAGE+=1
done
#将最后的结果进行去重,保存在result中。
cat info.txt | sort | uniq > result.txt
#显示出结果。
echo -e "\n\n结果显示:--------------------"

catresult.txt

转载自:http://lustlost.blog.51cto.com/2600869/1209349

你可能感兴趣的:(shell,IP)