仅对 bash 输出命令的特定部分进行归纳

仅对 bash 输出命令的特定部分进行归纳

我有一个名为 ipsweep 的简单程序。它应该做的就是 ping 一个 IP 地址,并显示正在使用的 IP。

这是我第一次做的事情:

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done

它起作用了,但它显示了我不需要的信息。我需要的只是正在使用的 IP 地址。它显示了每个 IP 的所有内容:

在此处输入图片描述

所以我尝试添加一些过滤器,例如| grep "ping" | cut -d " " -f 2

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip | grep "ping" | cut -d " " -f 2 &
done

现在控制台只显示 IP,但它显示所有 IP,无论它是否在用户中(我只需要正在使用的 IP,我再说一遍)。我已经尝试解决这个问题 5 个小时了,但我仍然无法解决。我知道如果可以解决这个问题,但我不知道如何编写它。

在此处输入图片描述

答案1

使用 ping 退出代码来确定主机是否处于活动状态:

#!/bin/bash
for ip in {1..254}; do
  ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done

答案2

首先,用单个数据包检查连接性是不明智的,但是:

# IP address 192.168.100.1 exists, 192.168.100.122 does not.
walt@bat:~(0)$ ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=63 time=2.76 ms

--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.763/2.763/2.763/0.000 ms
walt@bat:~(0)$ ping -c 1 192.168.100.122
PING 192.168.100.122 (192.168.100.122) 56(84) bytes of data.

--- 192.168.100.122 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

成功和失败的示例都包含--- 192.168.100.122 ping statistics ---您用来检测的行grep ping

你可以grep ", 0% packet loss"这样做。

相关内容