Curl是Linux下一個很強大的http命令行工具,其功能十分強大。html
支持多種協議,包括FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET等。linux
最簡單的用法:shell 抓取www.cnbeta.com的源碼並顯示bash [root@club shell]# curl www.cnbeta.com curl |
本腳本進行過濾提取curl抓取的html源碼中的信息,將信息進行處理。ide
curl支持不少選項,-i:只查看http頭部信息,-o:將獲取的結果保存在一個文件中工具
這裏不所有列出了,更詳細的介紹能夠參見此博文:http://blog.51yip.com/linux/1049.html,或者man curl網站
本腳本功能:搜索引擎
實現收集能夠查詢IP的網站,並將網站的域名,IP地址,和物理地址存儲顯示出來。url
最終效果:
收集網頁中:
收集結束後:
腳本和註釋:
#!/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結果顯示:--------------------" cat result.txt