一前言
最近看到許多同志在寫ping某個地址段的bash腳本,我也心血來潮來了一發。 當然本人新手,大神勿噴。
二準備工作
linux系統的機器一臺,當然虛擬機也可以,只要將網卡配置為橋接模式,可以連通其他局域網的主機即可。
1.實驗環境 Centos 7.X 虛擬機 軟件 bash ping
2.說明 首先系統當然是任何 linux類或類linux的機器都是可以的 虛擬機安裝完成后首先配置網卡
BOOTPROTO 我這里使用的是靜態的IP地址當然你也可以使用靜態ip
ONBOOT 是否啟用網卡 改為yes不然重啟機器后網卡又失效了
IPADDR 我這里是使用的靜態IP如果你的BOOTPROTO使用的是dhcp可以不用改這里
PREFIX 子網掩碼的位數我這里使用的是172.18.0.0網段所以子網掩碼是16位如果你的BOOTPROTO使用的是dhcp可以不用改這里
GATEWAY 默認網段不多解釋如果你的BOOTPROTO使用的是dhcp可以不用改這里
DNS1 DNS地址用來解析域名的如果你沒設好吧你無法登陸www.baidu.com了除非你知道他的IP地址
3.查看命令是否存在
man了一下ping命令查看一下具體用法 由man可以得知 -c是指定ping的次數 -W指定超時時間 好的開始
三腳本
為了能讓各位安全使用我已經做了多次的測試 可能還有小bug歡迎致電
腳本的內容如下:
#!/bin/bash
#Auther:xiaowu
#Dtion:ping dao ni
#Vsion:2.3
declare -i Inet
declare -i Snet
[[ $1 =~ ([0-9]{1,3}\.){3}([0-9]{1,3})\/(2[4-9]|3[0-2]) ]] #正則表達式驗證是否為正確格式
if [ $? -ne 0 ] ;then #判斷格式是否配正確匹配
{
echo ” Usage:$0 172.18.0.0/24-32.” #如果格式未被正確匹配返回250狀態碼,并提示使用方法
exit 250
}
fi
Inet=`echo “$1″ | cut -d”.” -f4 | cut -d”/” -f1` #獲取Ip地址位
Iseg=`echo “$1″ | cut -d”/” -f2` #獲取子網掩碼位
Ipv4=`echo “$1″ | cut -d”.” -f1,2,3` #獲取主機位
echo “子網掩碼的位數為:$Iseg” #輸出子網掩碼
echo “Ipv4的首個地址為:$Inet” #輸出網絡地址位
echo “查看的網段地址為:$Ipv4” #輸出匹配的網絡位
let Smask=32-$Iseg #計算子網掩碼反掩碼位數
echo “反向子網掩碼位為:$Smask” #輸出反掩碼位數
Sips=$[2**$Smask] #計算出指定網絡的IP數
echo “要查找的地址數為:$Sips” #輸出主機個數
Snet=$[ $Inet + $Sips -1 ] #從指定主機數到輸出的主機個數
if [ $Snet -gt 255 ] ;then #當地址數溢出時的補救措施
{
Snet=255 #主機數強制為255個
}
fi
for i in `seq $Inet $Snet`; #for循環從指定主機開始到指定網段結束的IP個數
do
ping -c1 -W1 $Ipv4.$i >/dev/null 2>&1 && echo -e “\033[32m$Ipv4.$i is \tup \033[0m” || echo -e “$Ipv4.$i is\033[31m \tdown \033[0m”
#ping 判斷主機是在線還是 不在線
done
unset Inet Iseq Ipv4 wjy Smask Sips Snet #釋放上邊使用到的變量
使用方法 標準的IP地址/子網掩碼的位數 譬如:172.18.252.0/24 172.18.253.20/28 172.18.6.110/30
主要是根據子網掩碼來計算需要ping的主機個數 適用于經過子網掩碼劃分過的網絡 最大支持/24 最多256個IP包括網絡位地址和主機位地址
注:此腳本適用于任何網段 并不是僅限于172.18.0.0 因為作者是172.18.0.0網段的 所以沒有用其他的網段測試
原創文章,作者:wode,如若轉載,請注明出處:http://www.www58058.com/70381
了解了一些IP設置當中一些參數所帶表的東西。腳本內容理解不了,等再多些知識再回頭看,不過功能實用,先收藏。
你試試把172.018.252.0/24 作為參數, 也是可以運行的. 格式正確了,但是忽略了010.172.001.0這種格式.
@JL:[[ $1 =~ ((2[0-4][0-9]|25[0-5]|1?[0-9]?[0-9])\.){3}(2[0-4][0-9]|25[0-5]|1?[0-9]?[0-9])\/(2[4-9]|3[0-2]) ]] 改變之后的正則表達式 這個可以正確的匹配IP的格式