求脚本,修改文件
时间:2011-08-20
来源:互联网
呵呵,脚本写得不是很好,希望有高手帮我完善,比如使用了外部命令,或语法规范,或更妙的技巧,或更加灵活性……
代码:
#!/bin/bash
#author: InBi
#date: 2011-08-16
#website: http://www.itwhy.org/2011/08-20/939.html
########################################################
awk=/bin/awk
cut=/bin/cut
echo=/bin/echo
grep=/bin/grep
ifconfig=/sbin/ifconfig
expr=/usr/bin/expr
bc=/usr/bin/bc
Ip=`ifconfig eth0|grep "inet addr"|awk -F " " '{printf $2}'|awk -F ":" '{print $2}'`
Mask=`ifconfig eth0|grep "inet addr"|awk -F ":" '{printf $4}'`
for ((i=1;i< =4;i++));do
Tmp=`echo $Ip|awk -F "." '{printf $'$i'}'`
Ip_Bin+=`echo "obase=2;$Tmp"|bc|awk '{printf "%08d\n",$0}'`
Tmp1=`echo $Mask|awk -F "." '{printf $'$i'}'`
Mask_Bin+=`echo "obase=2;$Tmp1"|bc|awk '{printf "%08d\n",$0}'`
done;
Mask_Lng=`echo $Mask_Bin|cut -f 1 -d "0"`
Mask_Lng=`expr length "$Mask_Lng"`
MyNet=`expr substr $Ip_Bin 1 $Mask_Lng`
MyBro=$MyNet
for ((i=$Mask_Lng;i<32;i++));do
MyNet+="0"
MyBro+="1"
done;
MyNet=$((2#$MyNet))
MyBro=$((2#$MyBro))
echo "-----------------"`date +"%F %T"`"-----------------" > $HOME/ScanIpMac.lst
for ((i=$(($MyNet+1));i< $MyBro;i++));do
Tmp=`echo "obase=2;$i"|bc`
Ip1=`expr substr $Tmp 1 8`
Ip1=$((2#$Ip1))
Ip2=`expr substr $Tmp 9 8`
Ip2=$((2#$Ip2))
Ip3=`expr substr $Tmp 17 8`
Ip3=$((2#$Ip3))
Ip4=`expr substr $Tmp 25 8`
Ip4=$((2#$Ip4))
Ip=$Ip1"."$Ip2"."$Ip3"."$Ip4
ping -n -c 1 $Ip > /dev/null 2>&1
if [ $? == 0 ];then
Mac=`arp -n $Ip|grep $Ip|awk -F " " '{print $3}'`
echo $Ip" "$Mac
fi
done;
echo "-----------------"`date +"%F %T"`"-----------------" >> $HOME/ScanIpMac.lst
exit 0
#author: InBi
#date: 2011-08-16
#website: http://www.itwhy.org/2011/08-20/939.html
########################################################
awk=/bin/awk
cut=/bin/cut
echo=/bin/echo
grep=/bin/grep
ifconfig=/sbin/ifconfig
expr=/usr/bin/expr
bc=/usr/bin/bc
Ip=`ifconfig eth0|grep "inet addr"|awk -F " " '{printf $2}'|awk -F ":" '{print $2}'`
Mask=`ifconfig eth0|grep "inet addr"|awk -F ":" '{printf $4}'`
for ((i=1;i< =4;i++));do
Tmp=`echo $Ip|awk -F "." '{printf $'$i'}'`
Ip_Bin+=`echo "obase=2;$Tmp"|bc|awk '{printf "%08d\n",$0}'`
Tmp1=`echo $Mask|awk -F "." '{printf $'$i'}'`
Mask_Bin+=`echo "obase=2;$Tmp1"|bc|awk '{printf "%08d\n",$0}'`
done;
Mask_Lng=`echo $Mask_Bin|cut -f 1 -d "0"`
Mask_Lng=`expr length "$Mask_Lng"`
MyNet=`expr substr $Ip_Bin 1 $Mask_Lng`
MyBro=$MyNet
for ((i=$Mask_Lng;i<32;i++));do
MyNet+="0"
MyBro+="1"
done;
MyNet=$((2#$MyNet))
MyBro=$((2#$MyBro))
echo "-----------------"`date +"%F %T"`"-----------------" > $HOME/ScanIpMac.lst
for ((i=$(($MyNet+1));i< $MyBro;i++));do
Tmp=`echo "obase=2;$i"|bc`
Ip1=`expr substr $Tmp 1 8`
Ip1=$((2#$Ip1))
Ip2=`expr substr $Tmp 9 8`
Ip2=$((2#$Ip2))
Ip3=`expr substr $Tmp 17 8`
Ip3=$((2#$Ip3))
Ip4=`expr substr $Tmp 25 8`
Ip4=$((2#$Ip4))
Ip=$Ip1"."$Ip2"."$Ip3"."$Ip4
ping -n -c 1 $Ip > /dev/null 2>&1
if [ $? == 0 ];then
Mac=`arp -n $Ip|grep $Ip|awk -F " " '{print $3}'`
echo $Ip" "$Mac
fi
done;
echo "-----------------"`date +"%F %T"`"-----------------" >> $HOME/ScanIpMac.lst
exit 0
作者: 215317196 发布时间: 2011-08-20
先介绍一下你的脚本目的是什么,大概的思路,这样别人看的时候也会直接一点。
作者: rediscover 发布时间: 2011-08-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28