Linux下Shell實現伺服器IP監測

來源:互聯網
上載者:User

標籤:linux   伺服器   bash   awk   shell   

實驗室有一個伺服器放在機房,裝的是Ubuntu Server,IP為自動分配,因此一旦IP有變化就無法遠程操作,必須去機房記錄新的IP。學了幾天Shell之後想,是不是可以定時檢測其IP的變化,一旦有變化就發送到郵箱呢?。首先分析一下這次任務,無非是幾塊內容:

1、查詢當前IP;

        2、查詢變化前的IP;

        3、如二者不想等則,讀取郵件清單;

        4、對列表發送郵件;

4. 定時執行指令碼;

       當然,在學校的上網認證系統大行其道的環境下又加了一條,那就是自動登陸上網認證系統,這又是後話了。

       首先是查詢當前IP,會點Linux的童鞋們應該對ifconfig不陌生,輸入一下得到:

eth0      Link encap:乙太網路  硬體地址 00:30:48:f9:b7:18  
          inet 地址:223.2.36.217  廣播:223.2.47.255  掩碼:255.255.240.0
          inet6 地址: fe80::230:48ff:fef9:b718/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  躍點數:1
          接收資料包:439851 錯誤:0 丟棄:0 過載:0 幀數:0
          發送資料包:410241 錯誤:0 丟棄:0 過載:0 載波:0
          碰撞:0 發送隊列長度:1000 
          接收位元組:76752373 (76.7 MB)  發送位元組:177467784 (177.4 MB)
          中斷:16 Memory:faee0000-faf00000 


lo        Link encap:本地環回  
          inet 地址:127.0.0.1  掩碼:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  躍點數:1
          接收資料包:583701 錯誤:0 丟棄:0 過載:0 幀數:0
          發送資料包:583701 錯誤:0 丟棄:0 過載:0 載波:0
          碰撞:0 發送隊列長度:0 
          接收位元組:179155467 (179.1 MB)  發送位元組:179155467 (179.1 MB)

       但是我只要其中IP,對於其他一大堆東西不感興趣,那怎麼辦。這下就需要我們的grep登場了,grep是文本尋找的“高手”,支援Regex,它將會返回結果的行。我們觀察到我們需要的IP:223.2.36.217的行前面為“inet 地址”,於是我們可以grep "inet 地址"。這樣就剩下兩行了:

 inet 地址:223.2.36.217  廣播:223.2.47.255  掩碼:255.255.240.0
         inet 地址:127.0.0.1  掩碼:255.0.0.0

        但是還有兩行,於是我們可以使用grep -v "127.0.0.1" 反向選擇刪除localhost,就只剩我們目標行了。

        接下來是要擷取列,我們觀察到目標行分隔是通過:和空格分的,所以咱使用下一個工具,cut,使用cut -d: -f2用:和空格分隔,擷取從第二列開始的數組,這就擷取了IP。最後使用awk ‘{print $1}‘將值賦予IP,於是形成完整的IP擷取:

     IP=`ifconfig|grep ‘inet 地址‘|grep -v ‘127.0.0.1‘|cut -d: -f2|awk ‘{print $1}‘`

      那怎麼知道IP有沒有變化呢?我的做法就是第一次的時候把IP記錄下來,即echo "$IP">IP_CONF,IP_CONF為一個叫ip.conf的檔案,每次讀這個檔案就知道之前的ip了,接下來就是郵件清單,記錄net-report.conf,要發郵件的時候從它們裡面讀取,並發送郵件:

       cat $MAIL_LIST|while read mailist
    do
      echo "Sending mail to $mailist"
      echo "New IP is:$IP"|mail -s newIP $mailist    
    done

     這就基本完成了, 但是多說一句,首先發送郵件得確定安裝sendmail或mailutils,並在/etc/host裡面改一下網域名稱。你收到的郵件地址會是你的“使用者名稱@網域名稱”,另外對外網郵箱,現在大多有設定反垃圾機制,嘗試了一下qq郵箱和新浪郵箱,均被攔截了。想要收到郵件得設定白名單。

     最後是怎麼定時執行shell,使用crontab吧,具體的看我轉載的文章http://blog.csdn.net/kaixin89/article/details/45199003

    下面給出完整的指令碼:

#!/bin/bashIP_CONF='ip.conf'MAIL_LIST='net-report.conf'IP=`ifconfig|grep 'inet 地址'|grep -v '127.0.0.1'|cut -d: -f2|awk '{print $1}'`if [ ! -d $IP_CONF ]then    touch $IP_CONFfi#ip is newestOLD_IP=`cat $IP_CONF|grep [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*`echo "IP:$IP OLD_IP:$OLD_IP"if [ -z "$OLD_IP" ] || [ "$OLD_IP" != "$IP" ] then    echo "$IP">$IP_CONF    cat $MAIL_LIST|while read mailist    do      echo "Sending mail to $mailist"      echo "New IP is:$IP"|mail -s newIP $mailist        donefi
    用自動化的方式解決最實際的問題,雖然還是很菜,但是很有成就感啊

Linux下Shell實現伺服器IP監測

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.