[網絡安全學習篇32]:Linux腳本編寫彙總及應用

引言:我的系列博客[網絡安全學習篇]上線了,小編也是初次創作博客,經驗不足;對千峯網絡信息安全開源的視頻公開課程的學習整理的筆記整理的也比較粗糙,其實看到目錄有300多集的時候,講道理,有點慫了,所以我就想到了通過寫博客(課程筆記)的形式去學習它,雖然寫博客會讓我多花幾倍的時間去學習它,但是當我完成一篇博客所獲得的成就感和你們對於我的認同感,讓我很滿足,能夠鼓勵我一天天的堅持下去,也希望和我一起學習本期視頻的"同道"們也能給一直堅持下去。我們大家一起加油。由於作者本身也是網絡信息安全小白,大部分知識點都是初次接觸,出現對其理解不深入,不完整,甚至也會出現錯誤有問題的地方,希望大家諒解、留言提出指正,同時也歡迎大家來找我一起交流學習!!!

 

往期博客:

第一階段:

[網絡安全學習篇1]:windowsxp、windows2003、windows7、windows2008系統部署(千峯網絡安全視頻筆記)

[網絡安全學習篇24]:漏洞與木馬(千峯網絡安全視頻筆記 p117-p118)

第二階段:

[網絡安全學習篇25]:初識Linux及簡單命令

[網絡安全學習篇26]:Linux下的命令幫助、壓縮、vim、軟件安裝的學習

[網絡安全學習篇27]:Linux操作系統的用戶和組、文件及目錄權限(千峯網絡安全視頻筆記 p134-p139)

[網絡安全學習篇28]:網絡地址的配置 日誌文件的管理、備份及日誌服務器的搭建

[網絡安全學習篇29]:apache與lamp平臺的搭建

[網路安全學習篇30]:Nginx和Tomcat服務的搭建、Nginx+Tomcat負載均衡的實現

[網絡安全學習篇31]:Linux 防火牆 iptables 中 filter(包過濾防火牆)和 nat(路由轉換)詳解

[網絡安全學習篇32]:Linux腳本編寫彙總及應用(本篇)

寫到這裏,我們千峯網絡安全的第二個階段的學習就到此結束了,學完Linux操作系統之後,感覺學習效果不太好,後期我打算專門出一期Linux的彙總,也算是再強化一下吧,畢竟對於我們學安全的,尤其是後面的滲透測試這一塊,對Linux的功底要高。

下期博文:

第三階段: 

[網絡安全學習篇33]:0基礎帶你入門python

 

目錄

 

腳本

一個簡單的腳本

實現流程

變量賦值

if判斷語句

結構

實例

檢測內網主機存活狀態

循環語句 for wile

for格式

for實例

wile格式

while實例

檢測內網主機存活裝態(升級)

case語句

case格式

函數

探測內網主句存活狀態(再升級)

Nginx自啓動腳本


腳本

Linux中的腳本其實就類似我們在windows系統中編寫的批處理,那麼我們如何去學習他呢?

我們這裏主要通過應對各種場景的要求,編寫相應的腳本去實現的過程中,我們去一步步的認識腳本編寫的各種語法。這些語法的含義其實在我們以前學過的編程語言中,已經瞭解了。這裏,我們主要是瞭解和學習其語法結構即可,你會發現,學起來非常輕鬆,也很有意思......

 

一個簡單的腳本

場景設定如下:

上午9點 要求設定eth0網卡 ip

192.168.1.100/24

192.168.1.254

下午2點要求設定eth0網卡 ip

172.16.1.100/24

172.16.1.254

實現流程

新建一個文件

  • vim fixip.sh

 

#!/bin/bash
cd etc/sysconfig/network-scripts/
echo 
echo "DEVICE=eth0" > ifcfg-eth0
echo "TYPE=Ethernet" >> ifcfg-eth0
echo "ONBOOT=yes" >> ifcfg-eth0
echo "BOOTPROTO=static" >> ifcfg-eth0
echo "IPADDR=192.168.1.100" >> ifcfg-eth0
echo "NATMASK=255.255.255.0" >> ifcfg-eth0
echo "GATEWAY=192.168.1.254" >> ifcfg-eth0
ifdown eth0
ifup eth0

這裏解釋以下:

#!bin/bash   指定用bash解釋器來解釋腳本語言

添加運行權限

  • chmod +x fixip.sh

執行(在當前目錄下)

  • ./fixip.sh

 

公司會隨機指定不同的ip進行修改

優化腳本爲交互式腳本,就引出了我們下面要講的變量賦值

 

變量賦值

首先,我們來看一下這幾行命令,執行之後的結果

 A 顧名思義就是我們定義的變量了,我們給其賦值,再通過$A調出它所表示的值(字符串)

read指令 結合我們的變量,就可以實現將用戶輸入的值賦給變量的過程

結構:

read -p " " 變量  

 通過我們的變量和read對前面的腳本進行優化升級,使其更實用且貼合人性化

#!/bin/bash
read -p "please input ipaddr:"IP
read -p "please input netmask:"MASK
read -p "please input gateway:"WAY
cd etc/sysconfig/network-scripts/
echo 
echo "DEVICE=eth0" > ifcfg-eth0
echo "TYPE=Ethernet" >> ifcfg-eth0
echo "ONBOOT=yes" >> ifcfg-eth0
echo "BOOTPROTO=static" >> ifcfg-eth0
echo "IPADDR=$IP" >> ifcfg-eth0
echo "NATMASK=$MASK" >> ifcfg-eth0
echo "GATEWAY=$WAY" >> ifcfg-eth0
ifdown eth0
ifup eth0

注:添加變量之後,echo後面必須是雙引號,不能是單引號了

變量前面不要忘了加$

 

if判斷語句

結構

if單分支結構

if 條件

then 成立子語句

fi

if 雙分支結構

if 條件

then 成立子語句

else 不成立子語句

fi

if 多分支結構

if 條件

then 成立子語句

elif 條件

then 成立子語句

else 不成立子語句

fi

實例

接下來我們編寫一個簡單的單分支判斷腳本

注:Linux中  大於 -gt 小於 -lt 等於 -eq

同樣,先創建一個sh文件

  • vim if.sh

#!/bin/bash
if [ 3 -lt 5 ]
then echo "yes"
fi

賦權

  • chmod +x if.sh

再來看一個多分支的例子

#!/bin/bash
read -p "please input a num:"NUM
if [ $NUM -lt 5 ]
then echo "lt"
elif [ $NUM -eq 10 ]
then echo "eq"
else echo "gt"
fi

 

檢測內網主機存活狀態

我們平時的ping操作,我們可以對其進行修飾,改變其特定的輸出顯示:

-c 指定其發送幾個包

-i 發間隔時間

-w 等待響應時間

那我們的ping語句的結果可以作爲if的條件嗎?可以

我們要將其輸出的結果不顯示

&> 文件 將前面的輸出結果導入到別的地方

  • ping -c2 -i0.2 -w2 12.34.56.78 &> /dev/null

新建一個文件ping.sh

  • vim ping.sh

#!/bin/bash

if `ping -c2 -i0.2 -w2 12.34.56.79 &> /dev/null`

then echo "yes"

else echo "no"

fi

注:` 這個符號如何在鍵盤上打出  英文狀態下:鍵盤上數字鍵1的左邊

同樣賦權執行

  • chmod +x ping.sh

這裏提前聲明以下,我們ping的這個ip原來就是通的

 

優化:

#!/bin/bash
read -p "please input ipaddr:"IP
if `ping -c2 -i0.2 -w2 $IP &> /dev/null`
then echo "$IP is up"
else echo "$IP is down"
fi

測試成功

侷限性:

我們測試一個主機可以,但是一個網段就不行了

這就要用到我們的循環,下面,我們就來介紹循環語句

 

循環語句 for wile

for和wile的區別

for 根據循環的次數(取值列表)循環

wile 根據條件循環

 我們在屏幕上直接輸出{1..10},就可以得到以下結果

for格式

for 變量 in 取值列表

do

    子語句

done

for實例

簡單的循環腳本

  • vim xun.sh

我相信大家在之前已經接觸過編程語言了,我就不做詳細著述了,直接上代碼

#!/bin/bash
for i in {1..10}
do 
    echo $i
done

 

 

wile格式

while 條件

do

   子語句

done

while實例

#!/bin/bash
NUM=0
while [ $NUM -lt 3 ]
do
    let NUM++
    echo $NUM
done

注:let NUM++  相當於 let NUM=NUM+!

檢測內網主機存活裝態(升級)

繼續我們回到前面的探測主機存活,這一次我們要實現在真實的環境中,探測局域網的主機存活狀態

將我們的網絡屬性配置到橋接模式

修改網卡配置

  • vim /etc/sysconfig/network-scripts/ifcfg-eth0

  • ifdown eth0
  • ifup eth0

  • vim ping.sh

for實現

#!/bin/bash
NET=10.0.110.
for i in {1..254}
do
    if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
    then echo -e "$NET$IP is \033[31mup\033[0m"
    else echo -e "$NET$IP is \033[32mdown\033[0m"
    fi
done

while實現:

#!/bin/bash
NET=10.0.110.
IP=200
while [$IP -lt 254 ]
    lxxxet IP=IP+1
    if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
    then echo -e "$NET$IP is \033[31mup\033[0m"
    else echo -e "$NET$IP is \033[32mdown\033[0m"
    fi
done


 

case語句

案例

./case.sh centos

redhat

./case.sh redhat

centos

./case xxxx

usage case.sh {redhat|centos}

使用case語句實現以上案例

case $1 in 
redhat)
    echo "centos"
    ;;
centos)
    echo "redhat"
    ;;
*)
    echo "Usage $0 {redhat|centos}"
esac

賦權

  • chmod +x case.sh

case格式

case 變量 in

模式1)

   子語句

   ;;

*)

   子語句

   ;;

esac

 

函數

將一部分代碼存儲到一個變量中

 

設計一個函數名字爲A

運行A時屏幕輸出OK

可以通過

echo $?

得到函數的返回值(return)

 

探測內網主句存活狀態(再升級)

繼續我們回到前面的探測主機存活,這一次我們要實現在真實的環境中,探測局域網的所有主機存活狀態

redhat(){
    echo cetos
    return 0
}
centos(){
    echo redhat
    return 0
}
case $1 in 
redhat)
    redhat
    ;;
centos)
    centos
    ;;
*)
    echo "Usage $0 {redhat|centos}"
esac
 

 

分析apache自啓動腳本

apache的啓動函數

apache的關閉函數

這些是不是看起來很熟悉,都是我們前面學的編寫的

接下來我們就來編寫nginx的自啓動腳本

Nginx自啓動腳本

首先我們要在/etc/init.d/目錄下編寫我們Nginx的啓動腳本nginxd

#!/bin/bash
nginx=/usr/local/nginx/sbin/nginx
start(){
    echo "nginx starting .... [OK] "
    $nginx
}
start

優化:

#!/bin/bash
nginx=/usr/local/nginx/sbin/nginx
start(){
    echo "nginx starting .... [OK] "
    $nginx
}
status(){
    if `ss -antpl | grep nginx > /dev/null`
    then echo "nginx starting .... "
    else echo "nginx stoping .... "
    fi
}
stop(){
    echo "nginx stoping .... [OK] "  
    $nginx -s stop

}
case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
restart
    stop
    start
    ;;
*)
    echo "Usage :$0 {start|stop|restart}"
esac

接下來,我們讓它永久啓動

打開我們編寫好的nginxd腳本,添加下面兩行

加入chkconfig list

  • chkconfig --add nginxd

默認都是關閉的off

我們將5級別打開on

  • chkconfig --list nginxd on

好了,我們的5級別已經開啓了

接下來,我們重啓操作系統

  • reboot

可以看到我們的nginx已經自啓動了


參考文獻:

B站千峯網絡信息安全開源視頻課程

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章