坐等perlfnan 写了:发个perl看看,只见口水。

坐等perlfnan 写了:发个perl看看,只见口水。
正确应该是:fnan 写了:#!/bin/bash
########################################################
awk=/bin/awk
echo=/bin/echo
ifconfig=/sbin/ifconfig
bc=/usr/bin/bc
##################################################################
Ip_Bin=$(ifconfig eth0|sed -rn '/inet /{s/[^:]*:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
Mask_Bin=$(ifconfig eth0|sed -rn '/inet /{s/.*Mask:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
#把IP和netmask每一段转换成二进制,然后连接起来
##################################################################
Mask_Lng=`printf ${Mask_Bin%%0*}|wc -c` #计算出netmask为“1”的部份有多少位
##################################################################
MyNet=${Ip_Bin:1:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d")
MyBro=${Ip_Bin:1:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d"|tr 0 1)
#计算出本机的网络号与广播号,用于下面循环
##################################################################
for (( i=$((2#$MyNet+1)); i< $((2#$MyBro)); i++ )); do
tmp=$(echo "obase=2;$i"|bc)
Ip=$(for a in {0..3};do [ ${a#0} ] && printf "."; printf $((2#${tmp:$a*8:8}));done) #每一次循环数8位分一段换成十制制,再连接起来。
##################################################################
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 #Ping每次计算出的IP,成功即提取MAC地址
##################################################################
done
exit 0
代码: 全选
MyNet=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d")
MyBro=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d"|tr 0 1)
代码: 全选
Ip_Bin=$(ifconfig eth0|sed -rn '/inet /{s/[^:]*:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
Mask_Bin=$(ifconfig eth0|sed -rn '/inet /{s/.*Mask:([^ ]*).*/obase=2;\1/;s/\./;/gp}'|bc|xargs printf "%08d")
代码: 全选
Ip=$(for i in {0..3};do test $i != 0 && printf '.'; printf $((2#${Tmp:$i*8:8}));done)