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  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结果显示:--------------------"
cat  result.txt

本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/1209349,如需转载请自行联系原作者