linux查看主机脚本,简单的bash脚本查看任意网段的在线主机
一前言
最近看到許多同志在寫ping某個地址段的bash腳本,我也心血來潮來了一發(fā)。 ?當然本人新手,大神勿噴。
二準備工作
linux系統(tǒng)的機器一臺,當然虛擬機也可以,只要將網(wǎng)卡配置為橋接模式,可以連通其他局域網(wǎng)的主機即可。
1.實驗環(huán)境 ?Centos 7.X 虛擬機 ?軟件 bash ?ping
2.說明 ?首先系統(tǒng)當然是任何 linux類或類linux的機器都是可以的 虛擬機安裝完成后首先配置網(wǎng)卡
BOOTPROTO????我這里使用的是靜態(tài)的IP地址當然你也可以使用靜態(tài)ip
ONBOOT? ? ? ? ?是否啟用網(wǎng)卡 改為yes不然重啟機器后網(wǎng)卡又失效了
IPADDR? ? ? ? ? 我這里是使用的靜態(tài)IP如果你的BOOTPROTO使用的是dhcp可以不用改這里
PREFIX????? ? ? ?子網(wǎng)掩碼的位數(shù)我這里使用的是172.18.0.0網(wǎng)段所以子網(wǎng)掩碼是16位如果你的BOOTPROTO使用的是dhcp可以不用改這里
GATEWAY? ? ? ?默認網(wǎng)段不多解釋如果你的BOOTPROTO使用的是dhcp可以不用改這里
DNS1????? ? ? ? ?DNS地址用來解析域名的如果你沒設(shè)好吧你無法登陸www.baidu.com了除非你知道他的IP地址
3.查看命令是否存在
man了一下ping命令查看一下具體用法 ? 由man可以得知 ?-c是指定ping的次數(shù) ?-W指定超時時間 ?好的開始
三腳本
為了能讓各位安全使用我已經(jīng)做了多次的測試 ?可能還有小bug歡迎致電
腳本的內(nèi)容如下:
#!/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狀態(tài)碼,并提示使用方法
exit 250
}
fi
Inet=`echo “$1″ | cut -d”.” -f4 | cut -d”/” -f1` ? ?#獲取Ip地址位
Iseg=`echo “$1″ | cut -d”/” -f2` ? ? ? ? ? ? ? ? ? ?#獲取子網(wǎng)掩碼位
Ipv4=`echo “$1″ | cut -d”.” -f1,2,3` ? ? ? ? ? ? ? ?#獲取主機位
echo “子網(wǎng)掩碼的位數(shù)為:$Iseg” ? ? ? ? ? ? ? ? ? ? ?#輸出子網(wǎng)掩碼
echo “Ipv4的首個地址為:$Inet” ? ? ? ? ? ? ? ? ? ? ?#輸出網(wǎng)絡(luò)地址位
echo “查看的網(wǎng)段地址為:$Ipv4” ? ? ? ? ? ? ? ? ? ? ?#輸出匹配的網(wǎng)絡(luò)位
let Smask=32-$Iseg ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#計算子網(wǎng)掩碼反掩碼位數(shù)
echo “反向子網(wǎng)掩碼位為:$Smask” ? ? ? ? ? ? ? ? ? ? #輸出反掩碼位數(shù)
Sips=$[2**$Smask] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #計算出指定網(wǎng)絡(luò)的IP數(shù)
echo “要查找的地址數(shù)為:$Sips” ? ? ? ? ? ? ? ? ? ? ?#輸出主機個數(shù)
Snet=$[ $Inet + $Sips -1 ] ? ? ? ? ? ? ? ? ? ? ? ? ?#從指定主機數(shù)到輸出的主機個數(shù)
if [ $Snet -gt 255 ] ;then ? ? ? ? ? ? ? ? ? ? ? ? ?#當?shù)刂窋?shù)溢出時的補救措施
{
Snet=255 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#主機數(shù)強制為255個
}
fi
for i in `seq $Inet $Snet`; ? ? ? ? ? ? ? ? ? ? ? ? #for循環(huán)從指定主機開始到指定網(wǎng)段結(jié)束的IP個數(shù)
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地址/子網(wǎng)掩碼的位數(shù) ?譬如:172.18.252.0/24 ? 172.18.253.20/28 ? 172.18.6.110/30
主要是根據(jù)子網(wǎng)掩碼來計算需要ping的主機個數(shù) ?適用于經(jīng)過子網(wǎng)掩碼劃分過的網(wǎng)絡(luò) 最大支持/24 最多256個IP包括網(wǎng)絡(luò)位地址和主機位地址
注:此腳本適用于任何網(wǎng)段 ?并不是僅限于172.18.0.0 ?因為作者是172.18.0.0網(wǎng)段的 ?所以沒有用其他的網(wǎng)段測試
原創(chuàng)文章,作者:wode,如若轉(zhuǎn)載,請注明出處:http://www.178linux.com/70381
總結(jié)
以上是生活随笔為你收集整理的linux查看主机脚本,简单的bash脚本查看任意网段的在线主机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 15手动关闭 iPhone 11
- 下一篇: 如何查看 iPhone 上更早之前的通话