分页: 1 / 1

初学者写脚本,高手指点下啊!!!【版本二】

发表于 : 2011-08-26 12:24
215317196
:em06 版主不会怪我重复发贴吧?不好意思啊,我太执着了!
得各位高手指点,受益良多,我又对脚本改进了一下,还请指点。
以前扫描的时间需要20分钟左右,现在只需要10秒就行了。
----------------------------更加期待 Python 版本出现啊!

代码: 全选

#!/bin/bash
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 "\n---------- "start at $(date +"%Y-%m-%d %H:%M:%S")" ----------\n">$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"\t\t"$3}'|tee -a $HOME/ScanIpMac.lst
    #arp -n 输出按 IP 排序后重定向到 ScanIpMac.lst 文件,并打印至标准输出。
	echo -e "\n---------- "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

Re: 初学者写脚本,高手指点下啊!!!【版本二】

发表于 : 2011-08-26 20:46
ChenFengyuan
扫局域网的ip?
用nmap!!!

Re: 初学者写脚本,高手指点下啊!!!【版本二】

发表于 : 2011-08-26 23:54
215317196
ChenFengyuan 写了:扫局域网的ip?
用nmap!!!
我是新手,还不会使用nmap哦,请问使用nmap怎么快速扫描整个网络中主机的mac地址,并输出到一个文件中。
整个网络也许是30台,或也许有1000多台。

Re: 初学者写脚本,高手指点下啊!!!【版本二】

发表于 : 2011-08-27 11:50
ChenFengyuan
215317196 写了:
ChenFengyuan 写了:扫局域网的ip?
用nmap!!!
我是新手,还不会使用nmap哦,请问使用nmap怎么快速扫描整个网络中主机的mac地址,并输出到一个文件中。
整个网络也许是30台,或也许有1000多台。
# nmap -sP 192.168.1.0/24

Re: 初学者写脚本,高手指点下啊!!!【版本二】

发表于 : 2011-08-27 14:19
fnan
#!/bin/bash

set `echo 'obase=2;'$(ifconfig wlan0|grep -oP 'addr:\S+|Mask:\S+'|tr -c 0-9 ';')|bc|xargs printf "%08d"|grep -Eo '.{32}'`
Len=$(printf ${2//0/}|wc -c)
Net=${1:0:$Len}${2//1/}
NetIp=$(for a in {0..3};do [ ${a#0} ] && printf '.';printf $((2#${Net:$a*8:8}));done)
Ip=$(nmap -sP $NetIp/$Len|grep -oP '\d+\.\d+\.\d+\.\d+')
for i in $Ip;do echo -n $i;arp -n $i|awk '{if (NR==2) printf "%30s","MAC= "$3} END{print ""}';done
#nmap不显示MAC,机器问题还是怎么的?

Re: 初学者写脚本,高手指点下啊!!!【版本二】

发表于 : 2011-08-27 14:22
adagio
你重复发帖啦?这可是你自己说的怪不了我,疯号 :em04