Shell实现多进程扫描IP网段
来源:互联网 发布:淘宝装修日记哪里去了 编辑:程序博客网 时间:2024/06/06 02:15
在做内网主机存活测试时, 总会要用到IP网段扫描工具, 这样的工具可以是 nmap 之类的专业型网段扫描, 也可以自己编写脚本简单的实现这一过程, 事实上, 我们自己编写的脚本未必会比专业型的速度慢, 这里就以 IP 扫描工具来简单说明一下多进程在shell里的应用:
我们要实现的功能是: ./netScan.sh 192.168.0 1,100
此时, 脚本将扫描192.168.1的网段内1到100号主机. 于是传统的写法为:
domain=`echo $1`ip_start=`echo $2| cut -d "," -f 1`ip_end=`echo $2| cut -d "," -f2`ip_crt=`echo $ip_start`function segScan(){ ping -c 1 $1.$2 > /dev/null && echo "$2 is alive" rst=`echo $?` return $rst}while [ $ip_crt -ne $ip_end ]do{ segScan $domain $ip_crt rst=`echo $?` ip_crt=$((ip_crt+1))}done
但这样的脚本效率是很低的, 会蠢到从1到100一个一个去ping, 当存活主机数本就不多的时候等待的时间非常长, 于是我们有了如下的改进:
domain=`echo $1`ip_start=`echo $2| cut -d "," -f 1`ip_end=`echo $2| cut -d "," -f2`ip_crt=`echo $ip_start`function segScan(){ ping -c 1 $1.$2 > /dev/null && echo "$2 is alive"& rst=`echo $?` return $rst}while [ $ip_crt -ne $ip_end ]do{ segScan $domain $ip_crt rst=`echo $?` ip_crt=$((ip_crt+1))}donewait
通过在 ping 命令的后面加一个 &, 把单个的 ping 进程放入后台, 关键字 wait 的使用保证了等待所有 ping 成功完成后再终结父进程, 实践效果如下:
如图所示, 扫描完一整个网段仅用了10s
当然, 这里的程序最大的毛病就是没有控制并发量, 这里是 ping 命令, 可能看不到太大的影响, 但如果是比较消耗内存的进程, 一次性的执行这么大数量的子进程对系统而言开销无疑会非常的大! 因此这之类的脚本要根据实际情况设置自己的信号量, 加入数量上的进程控制, 避免因系统开销过大而造成的严重问题.
阅读全文
1 0
- Shell实现多进程扫描IP网段
- bat多进程扫描网段
- 实现shell多进程局域网扫描
- C#实现网段扫描
- C#实现网段扫描
- C# 实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- C#实现网段扫描
- 扫描网段找出树莓派IP
- [python] python扫描网段IP
- 多任务网段扫描
- java中,switch语句的陷阱
- virtualenv内安装TensorFlow
- thymeleaf标签之th:text的使用
- IOS中的UISegmentedControl控件实现多行文本
- 微信小程序 button内多行文字垂直居中、短信倒计时
- Shell实现多进程扫描IP网段
- ssh分页的实现
- 安卓自定义控件
- STM32->RCC
- Hadoop2.X Yarn框架原理及运作机制
- 关于微信支付第一次成功,后面就不成功的坑。。。。
- BZOJ4169: Lmc的游戏
- Map和Map<key,value>及Map<String, ?>的区别
- C#——文件分割与合并