我的任务是在linux机器上使用ping和grep工具的组合来生成网络中存在的ip地址列表,我只想显示那些是实时的。到目前为止,这是我的代码:
#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping 10.1.0.$COUNTER -c 1
COUNTER=$(( $COUNTER + 1 ))
done
答案 0 :(得分:2)
我建议你使用nmap:
nmap -sP 10.1.0.*
为您提供网络中的所有IP。
如果你必须使用grep和table:
nano liveAddress.sh
完成代码:
#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping -c 1 10.1.0.$COUNTER | grep PING | awk '{print $2}'
COUNTER=$(( $COUNTER + 1 ))
done
保存(ctrl + o)并退出(ctrl + x)。
chmod +x liveAddress.sh
./liveAddress.sh
这样就可以让你在网络上获得机器的IP。
答案 1 :(得分:0)
首先,为ping
添加1秒的限制#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping -w1 10.1.0.$COUNTER -c 1
COUNTER=$(( $COUNTER + 1 ))
done
将脚本命名为s.sh,然后
. s.sh | grep '1 received' -B1 | awk {'print $2'}
最后,删除此脚本并使用nmap; )
答案 2 :(得分:0)
为什么需要使用grep
?
只需对代码进行一些更改就可以找到所有活着的ips:
#!/bin/bash
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping -w1 10.1.0.$COUNTER -c 1
if [ $? -eq 0 ];then
echo "10.1.0.$COUNTER"
fi
COUNTER=$(( $COUNTER + 1 ))
done
答案 3 :(得分:0)
对于不想安装nmap的用户,请使用简单的bash脚本。您可以将任何C-Class网络设置为参数。
#!/bin/bash
#set -x
net=$1
typeset -i i
for (( i = 1 ; i<255 ; i++ )) ;
do
ip=$net.$i
ping -c 1 -W1 $ip >/dev/null
if [ $? == '0' ]
then
echo $ip exists
fi
done
另存为 broadcast.sh 并设置权限
chmod +755 broadcast.sh
开始
./broadcast.sh 192.168.200
输出
192.168.200.1 exists
192.168.200.3 exists
答案 4 :(得分:0)
仅使用默认工具即可快速响应:
#!/bin/bash
IP_PREFIX=$1
if [[ -z $IP_PREFIX ]]; then
echo "Usage: $(basename $0) 192.168.1"
exit
fi
export COUNTER=1
while [ $COUNTER -lt 255 ]
do
TARG="${IP_PREFIX}.${COUNTER}"
#echo "Pinging $TARG"
ping $TARG -c 1 -w 4 | grep -B 1 "\b0% packet loss" > /dev/null && \
echo $TARG is alive. &
COUNTER=$(( $COUNTER + 1 ))
done
wait