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结果显示:--------------------"
|
转载自:http://lustlost.blog.51cto.com/2600869/1209349