列出linux中网络中的所有实时IP地址

时间:2014-02-11 14:30:34

标签: linux grep ping

我的任务是在linux机器上使用ping和grep工具的组合来生成网络中存在的ip地址列表,我只想显示那些是实时的。到目前为止,这是我的代码:

#!/bin/sh

COUNTER=1

while [ $COUNTER -lt 254 ]
do
  ping 10.1.0.$COUNTER -c 1
  COUNTER=$(( $COUNTER + 1 ))
done

5 个答案:

答案 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