用shell腳本收集查詢IP信息的網站

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
相關文章
相關標籤/搜索