免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4757 | 回复: 14
打印 上一主题 下一主题

[其他] 求一个多线程ping多网段IP的实例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-04-11 00:03 |只看该作者 |倒序浏览
本帖最后由 yexingqi 于 2017-04-11 00:08 编辑


请教一下,我想ping以下网段,看哪些IP地址可以ping通并另存为ping_ok.txt:
cat ip_list.txt
192.168.0.0/22
10.10.10.0/24
172.16.1.1/23

请问有什么好的办法可以用bash shell直接ping上述网段的所有IP地址吗? 如能多线程同时ping则最理想。 我在网上查也不少资料,也尝试过很多次都没有成功。故求助大家,谢谢!!!




论坛徽章:
0
2 [报告]
发表于 2017-04-11 00:21 |只看该作者
本帖最后由 yexingqi 于 2017-04-11 00:23 编辑

#!/bin/bash
for i in $(seq 1 254)
    do
    {
    IP="172.16.8.$i"
    ping $IP -c1 -s1 2>&1 1>/dev/null && echo -e $IP is "alive" || echo -e $IP is "down"
    } &
    done
wait

这个脚本不完整,只能手动指定其中一个24位掩码的网段。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2017-04-11 02:47 |只看该作者
目测你需要fping

论坛徽章:
0
4 [报告]
发表于 2017-04-11 10:02 |只看该作者
回复 3# 关阴月飞

fping无法拿到TTL信息。所以我还是希望用ping,谢谢!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2017-04-11 21:24 |只看该作者
本帖最后由 jason680 于 2017-04-11 22:38 编辑

回复 1# yexingqi

$ ipcalc 192.168.0.0/22
Address:   192.168.0.0          11000000.10101000.000000 00.00000000
Netmask:   255.255.252.0 = 22   11111111.11111111.111111 00.00000000
Wildcard:  0.0.3.255            00000000.00000000.000000 11.11111111
=>
Network:   192.168.0.0/22       11000000.10101000.000000 00.00000000
HostMin:   192.168.0.1          11000000.10101000.000000 00.00000001
HostMax:   192.168.3.254        11000000.10101000.000000 11.11111110
Broadcast: 192.168.3.255        11000000.10101000.000000 11.11111111
Hosts/Net: 1022                  Class C, Private Internet


$ echo 192.168.0.0/22 | awk '{cmd="ipcalc "$1; while(cmd|getline){if(/HostMin/)ips=$2;if(/HostMax/)ipe=$2};close(cmd);print ipe,ips}'
192.168.3.254 192.168.0.1


or boardcast ping

ping -c 1 -b 192.168.3.255


论坛徽章:
0
6 [报告]
发表于 2017-04-14 09:26 |只看该作者
回复 5# jason680

谢谢您的解答。按您提供的思路已经解决,再次感谢!

论坛徽章:
0
7 [报告]
发表于 2017-04-21 01:14 |只看该作者
代码可以发出来吗??

论坛徽章:
0
8 [报告]
发表于 2017-04-21 05:30 来自手机 |只看该作者
楼主你问题解决了能否把脚本分享一下?

论坛徽章:
0
9 [报告]
发表于 2017-04-21 09:04 |只看该作者
shell是有多线程的说法,但是不知道效率怎么样

论坛徽章:
0
10 [报告]
发表于 2017-04-28 14:29 |只看该作者
回复 8# xx669

这样就可以了:cat ip_list.txt
192.168.0.0/22
10.10.10.0/24
172.16.1.1/23

--------------
#!/bin/bash
rm -rf subnet.txt
rm -rf detail_ip.txt
while read line
do
iplist=`echo $line| awk '{cmd="ipcalc "$1; while(cmd|getline){if(/HostMin/)ips=$2;if(/HostMax/)ipe=$2};close(cmd);print ipe,ips}' >> subnet.txt`
done < ip_list.txt


while read line
do
line2=`echo $(echo $line |awk -F"[ ]" '{print $2 " " $1}')`
three2=`echo $(echo $line |awk -F"[ ]" '{print $1}')|awk -F"[.]" '{print $3}'`
three1=`echo $(echo $line |awk -F"[ ]" '{print $2}')|awk -F"[.]" '{print $3}'`
fronttwo=`echo $(echo $line |awk -F"[ ]" '{print $1}')|awk -F"[.]" '{print $1 "."$2}'`
for ((i=$three1;i<=$three2;i++))
do
    for ((j=1;j<=254;j++))
   do
     echo $fronttwo.$i.$j >> detail_ip.txt
   done
done
done < subnet.txt
--------------------


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP