如何使用shell 批量ping域名,生成一个结果文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用shell 批量ping域名,生成一个结果文件?相关的知识,希望对你有一定的参考价值。

能ping通显示地名和对应的IP地址,不能ping通显示域名和no ping

脚本:

#!/bin/sh
filename=domains.txt
ping_count=3
while read domain; do
x=$(ping -W 1 -c $ping_count $domain 2>/dev/null | grep -E "(PING)|(loss)")
loss=$(echo "$x" | grep "loss" | awk 'printf "%s", substr($6, 1, length($6)-1)')
if [ $loss -eq 100 ]; then
echo "$x" | grep "PING" | awk 'printf "%s no ping\\n", $2'
else
echo "$x" | grep "PING" | awk 'printf "%s %s\\n", $2, substr($3, 2, length($3)-2)'
fi
done <$filename


可适当调整每个域名 ping 的次数(ping_count),以保证准确度和性能。


数据文件:

cat domains.txt

www.baidu.com

www.taobao.com

www.qq.com

www.baidud.com


结果:

www.baidu.com 14.215.177.38

www.taobao.com 183.61.241.252

www.qq.com 59.37.96.63

www.baidud.com no ping


另:我理解那个“地名”应该是“域名”误写,如果真的需要地名,可以借助 whois 命令,甚至 IP 数据库(比如纯真数据库)。

参考技术A #!/bin/bash
domain="www.baidu.com www.google.com www.163.com"
num=10

for ip in $domain
do
  echo "+++++$ip+++++++" >> result.txt
  ping -c $num  $ip >> result.txt
done

一个简单的ping脚本

domain中填入需要ping的域名

num填入ping的次数

最后ping的结果保存为一个名为result.txt的文件中

参考技术B 显示地名是什么意思?

ping命令结果中如何显示时间

我的电脑一直掉线。我想记录什么时候掉线的请问怎么在结果中加上时间 就这个中 Reply from 218.4.77.16: bytes=32 time=11ms TTL=127Reply from 218.4.77.16: bytes=32 time=31ms TTL=127Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Request timed out.Reply from 218.4.77.16: bytes=32 time=21ms TTL=127Reply from 218.4.77.16: bytes=32 time=11ms TTL=127Reply from 218.4.77.16: bytes=32 time=12ms TTL=127Reply from 218.4.77.16: bytes=32 time=11ms TTL=127Reply from 218.4.77.16: bytes=32 time=12ms TTL=127Reply from 218.4.77.16: bytes=32 time=11ms TTL=127Reply from 218.4.77.16: bytes=32 time=11ms TTL=127Reply from 218.4.77.16: bytes=32 time=12ms TTL=127

可以通过批处理实现,在后面加上时间。

@echo off

d:

for /l %%i in (1,1,%999999999%) do (

ping %1192.168.1.1 -n 1% && echo %% >>ping.txt

date /t >>ping.txt

time /t >>ping.txt

)

pause

扩展资料:

注意事项

ping命令脚本:

:top

set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%    获取当前系统的年月日

echo %time% >> flogin.aspx_%BACKUPDATE%log.txt

ping -n 1 www.baidu.com | findstr "TTL" >> flogin.aspx_%BACKUPDATE%log.txt

goto top

:top

echo %time% >> gateway_%BACKUPDATE%log.txt    当前系统时间追加到txt文档中

ping -n 1 127.0.0.1 | findstr "TTL" >> gateway_%BACKUPDATE%log.txt    

goto top

参考技术A

命令本身是不具备的,可以通过批处理实现,在后面加上时间,可以参考下面的代码:

@echo off

d:

for /l %%i in (1,1,%999999999%) do (

ping %1192.168.1.1 -n 1% && echo %% >>ping.txt

date /t >>ping.txt

time /t >>ping.txt

)

pause

扩展资料:

ping命令实现方式

ICMPPing

ICMP是一种将差错与控制集于一体的协议,不仅用于传输差错报文,还用于消息控制报文。

TCPPing

在进行ICMPPing的时候,如果在目标主机的网络网关过滤了ICMP Ping包,ICMPPing的结果就不准确了。

UDPPing

在TCP/IP协议组中,用户数据报协议(UDP)提供应用进程之间数据报传送的基本机制。

参考资料来源:百度百科-ping (网络诊断工具)

参考技术B 网络命令ping命令不支持显示时间。我们打开cmd,通过ping --help可以查询ping命令的所有参数。
如果需要长ping,我们一般使用-t参数,如果限制ping的生存时间可以使用“-i 生存时间”具体使用如下:
ping ip地址或者域名 -t -i (1-255)如果中断的话,使用ctrl+c
参考技术C 请输入 ping --help来查看ping命令的所有参数,并没有你说的功能,不过可以通过外部软件来实现。思路是返回值为空就是掉线的时间。 参考技术D 把以下的代码保存成ping.bat 你要查记录,到C:\1.txt查看就行了del C:\1.txtping 218.4.77.16 >c:\1.txt:1timeping 218.4.77.16 >>c:\1.txtgoto 1

以上是关于如何使用shell 批量ping域名,生成一个结果文件?的主要内容,如果未能解决你的问题,请参考以下文章

信息收集之域名IP互查

一个简单的shell小脚本,批量ping主机ip的存活状态

批量ping 查看主机能否ping通,能否ssh上.md,

高性能异步批量ping的golang实现

DOS 批处理文件 ping脚本返回时间

简单实现批量ping并生成html报告 Powershell Code