find 查找一个随机文件
时间:2011-08-26
来源:互联网

得各位高手指点,受益良多,我又对脚本改进了一下,还请指点。
以前扫描的时间需要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
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
作者: 215317196 发布时间: 2011-08-26
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28