zoukankan      html  css  js  c++  java
  • 扫描局域网内所有主机和MAC地址的Shell脚本

    #!/bin/bash
    #author:        InBi
    #date:          2011-08-16
    #website:       http://www.itwhy.org/2011/08-20/939.html
    ########################################################
    ScanIpMac(){
    	Ip_Bin=$(ifconfig $1|sed -rn '/inet /{s/[^:]*:([^ ]*).*/obase=2;1/;s/./;/gp}'|bc|xargs printf "%08d")
    	Mask_Bin=$(ifconfig $1|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:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d")
    	MyBro=${Ip_Bin:0:$Mask_Lng}$(printf "%0$((32-$Mask_Lng))d"|tr 0 1)
    	#计算出本机的网络号与广播号,用于下面循环。
    	echo -e "
    ---------- "start at $(date +"%Y-%m-%d %H:%M:%S")" ----------
    ">$HOME/ScanIpMac.lst
    	for (( i=$((2#$MyNet+1)); i< $((2#$MyBro)); i++ )); do
    			Tmp=$(echo "obase=2;$i"|bc)
    			Ip=$(for i in {0..3};do test $i != 0 && printf '.'; printf $((2#${Tmp:$i*8:8}));done)
    			#每一次循环数换成二进制,然后8位分一段换成十制制,再连接起来。
    			arping -w 0.3 -c 1 $Ip > /dev/null 2>&1 &
    			#发送 ARP 包,且不等待响应就进行下一次循环。
    	done;
    	sleep 5
    	#等待 5 秒。
        arp -n -i $1 2>/dev/null|grep ':'|sort -n -u -t "." -k1,1 -k2,2 -k3,3 -k4,4|awk -F ' ' '{print  $1"		"$3}'|tee -a $HOME/ScanIpMac.lst
        #arp -n 输出按 IP 排序后重定向到 ScanIpMac.lst 文件,并打印至标准输出。
    	echo -e "
    ---------- "End at $(date +"%Y-%m-%d %H:%M:%S")" ------------">>$HOME/ScanIpMac.lst
    	exit 0
    }
    if test -n "$1" && test $1 != lo && `ifconfig $1>/dev/null 2>&1`; then
    	ScanIpMac $1;
    else
    	echo 'NOTE: please enter the right parameter.'
    	echo 'For example: ScanIpMac eth0.'
    	exit 1
    fi

    http://www.kuqin.com/networkmanagement/20110918/264970.html
  • 相关阅读:
    版本管理
    图解电路
    Java语言基础
    电工学入门
    11个例子教会你看电路图
    如何提高STM32的学习效率
    开发板入门
    Altium Designer
    电子设计从零开始
    推荐书籍
  • 原文地址:https://www.cnblogs.com/seasonzone/p/6657575.html
Copyright © 2011-2022 走看看