使用grep将ping命令中的ttl与操作系统关联起来

使用grep将ping命令中的ttl与操作系统关联起来

目前,我正在研究脚本,正在编写一些东西来 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并打印所需的信息。

相关内容