目前,我正在研究脚本,正在编写一些东西来 ping 网络上的设备,说明其是否可达,然后从 ping 中获取 ttl 数据并说明它的操作系统。
我并不完全熟悉 grep 命令的工作原理,但这是我到目前为止所掌握的:
for host in $(seq 1 255);
do
ping -c 1 $sn.$host | grep "Unreachable" &>/dev/null
if [ $? -eq 0 ]; then
printf "%s\n" "$sn.$host is Offline"
fi
ping -c 1 $sn.$host | grep "ttl" &>/dev/null
if [ $? -eq 0 ]; then
printf "%s\n" "$sn.$host is Online"
fi
done
知道 Linux 的 ttl 为 64、Windows 的 ttl 为 128、ios 的 ttl 为 255,我该如何修改此脚本以使其输出类似“$host 在线。操作系统:Linux”的内容?
我知道我可以复制“ping -c 1 $sn.$host | grep“ttl””行三次,添加 ttl 值并创建 if 语句来打印我想要的内容,但我想得到如果可能的话,它会在一次 ping 执行中完成。
答案1
ping
您可以通过如下修改来获取 ttl :
ttl=$( ping -c 1 turing | grep ttl | sed 's/.*ttl=\([[:digit:]]*\).*/\1/' )
此后,可以直接检查输入的值ttl
并打印所需的信息。