我有一个名为 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"
这样做。