用shell实现MAC地址最后一位增加: 如,mac=70:65:82:00:21:13 对其进行加1操作后成为70:65:82:00:21:14

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用shell实现MAC地址最后一位增加: 如,mac=70:65:82:00:21:13 对其进行加1操作后成为70:65:82:00:21:14相关的知识,希望对你有一定的参考价值。

用shell实现MAC地址最后一位增加: 如,mac=70:65:82:00:21:13 对其进行加1操作后成为70:65:82:00:21:14 shell如何实现

思路如下:

1,把mac地址转换成数字;2,数字+1;3,再把数字转换mac地址。参考代码如下

#!/bin/bash
#input a MAC address as arg 1, then output a MAC address right after input
#ie. input 00:11:22:33:44:55, output 00:11:22:33:44:56
#from xx:xx:xx:xx:xx:xx to decimal number
MAC_ADDRESS_IN_DECIMAL=0
MAC_ADDRESS=''
function mac_to_num()

 num=0
 significant=`printf %d 0x10000000000`
 for i in 1,4,7,10,13,16
 do
  str=`expr substr $1 $i 2`
  m=`printf %d 0x$str`
  n=`expr $m \\* $significant`
  significant=`expr $significant \\/ 256`
  num=`expr $num + $n`
 done
 MAC_ADDRESS_IN_DECIMAL=$num
 return 0

#inverse convertion
function num_to_mac()

 num=$1
 str=''
 for i in 0..5
 do
  n=`expr $num % 256`
  num=`expr $num \\/ 256`
  n=`printf %02x $n`
  str=$n:$str
 done
 MAC_ADDRESS=$str%:
 return 0

mac_to_num $1
num_to_mac `expr $MAC_ADDRESS_IN_DECIMAL + 1`
echo $MAC_ADDRESS

运行截图:

参考技术A # mac=70:65:82:00:21:13
# echo $mac|awk -F: 'print $1":"$2":"$3":"$4":"$5":"$NF+1'
70:65:82:00:21:14
参考技术B #!/bin/bash

MAC="mac=70:65:82:00:21:13"
NUM=`echo $MAC | awk -F: 'print $6'`
RES=`expr $NUM + 1`
echo $MAC:0:19$RES
参考技术C #!/bin/bash
mac=70:65:82:00:21:13
a=`echo $mac | awk -F ':' 'print $1":"$2":"$3":"$4":"$5":"$NF+1'`
echo $a

shell应用4

1、编写一个名为getarp.sh 的小脚本,记录局域网中各主机的MAC地址:
1、编写getarp.sh脚本文件
(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。
(2)将网段地址(如192.168.4.)赋值给变量NADD,作为检测地址的前缀。
(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。

[[email protected] ~]# vi getarp.sh
#!/bin/bash

  1. 定义网段地址、MAC列表文件
    NADD="192.168.4."
    FILE="/etc/ethers"
  2. 发送ARP请求,并记录反馈结果
    [ -f $FILE ] && /bin/cp -f $FILE $FILE.old //备份原有文件
    HADD=1 //定义起始扫描地址
    while [ $HADD -lt 128 ]
    do
    arping -I ens33 -c 2 ${NADD}${HADD} &> /dev/null
    if [ $? -eq 0 ] ; then
    arp -n | grep ${NADD}${HADD} | awk ‘{print $1,$3}‘ >> $FILE
    fi
    let HADD++
    done
    [[email protected] ~]# chmod +x getarp.sh
    [[email protected] ~]# ./getarp.sh //执行检测程序
    [[email protected] ~]# cat /etc/ethers
    2.编写一个名为 scanhost.sh 的扫描脚本,检查有哪些主机开起来匿名FTP服务,扫描对象为 /etc/ether 文件中的所有IP地址,扫描端口为21.

(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。
(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。
(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。

[[email protected] ~]# vi scanhost.sh
#!/bin/bash
TARGET=$(awk ‘{print $1}‘ /etc/ethers)
echo "以下主机已开放匿名FTP服务:"
for IP in $TARGET
do
wget ftp://$IP/ &> /dev/null
if [ $? -eq 0 ] ; then
echo $IP
rm -rf index.html //删除测试产生的临时文件
fi
done

3、利用for循环批量创建用户

#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
done

4、利用while循环判断在线的主机

#!/bin/bash
HLIST=$(cat /root/a.txt)
i=130
while [ $i -le 135 ]
do
for IP in $HLIST
do
ping -c 3 -i 0.2 $IP
if [ $? -eq 0 ]
then
echo "host 192.168.8 $i is up">>/1.txt
else
echo "host 192.168.8$i is down">>/2.txt
fi
done
let i++
done

5、利用脚本判断服务是否启动,没有启动则启动
#!/bin/bash
case "$1" in
start)
echo -n "qidong"
if sleep 7200 &
then
echo "ok"
fi
;;
stop)
echo -n "tingzhi"
pkill "sleep" &> /dev/null
echo "ok"
;;
status)
if pgrep "sleep" &> dev/null ; then
echo "sleepqidong"
else
echo "sleeptingzhi"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "yongfa: $0 {start|stop|status|restart}"
esac

以上是关于用shell实现MAC地址最后一位增加: 如,mac=70:65:82:00:21:13 对其进行加1操作后成为70:65:82:00:21:14的主要内容,如果未能解决你的问题,请参考以下文章

求教大神怎么用shell脚本把16进制的MAC地址转化为10进制

linux C语言 取网口MAC地址 类型转换问题 详见内

shell应用4

HC05绑定地址的时候返回error7

HC05绑定地址的时候返回error7

HC05绑定地址的时候返回error7