56

约束:
1. 速度很重要。
2.我可以ping一次。

我正在争论是使用 Python 还是 shellscripting。有比 更快的方法bash吗?

这是当前的代码,

for ip in $(seq int1 int2); do
    ping -c 1 xxx.xxx.xxx.$ip | grep "bytes from" &
done

有什么比这更快的吗?

4

8 回答 8

101

您应该使用 NMAP:

nmap -T5 -sP 192.168.0.0-255
于 2012-12-26T09:45:02.087 回答
47

以下(邪恶)代码的运行速度比 nmap 方法快两倍

for i in {1..254} ;do (ping 192.168.1.$i -c 1 -w 5  >/dev/null && echo "192.168.1.$i" &) ;done

大约需要 10 秒,其中标准的 nmap

nmap -sP 192.168.1.1-254

需要25秒...

于 2014-02-16T17:20:57.077 回答
13

试试这个以获得一个独特的列表。

ping -c 5 -b 10.10.0.255 | grep 'bytes from' | awk '{ print $4 }' | sort | uniq

另一种方法(获取实时主机):

fping -ag 192.168.1.0/24

于 2012-12-26T09:49:31.123 回答
5

试试这两个命令,看看为什么 arp 更快:

平:

对于 $(seq 1 254) 中的 ip;执行 ping -c 1 10.185.0.$ip > /dev/null; [ 美元?-eq 0 ] && echo "10.185.0.$ip UP" || : ; 完毕

ARP:

对于 $(seq 1 254) 中的 ip;做 arp -n 10.185.0.$ip | grep 地址;[ 美元?-eq 0 ] && echo "10.185.0.$ip UP" || : ; 完毕

于 2016-03-10T20:02:47.190 回答
1

这是在192.168.0.0-192.168.0.100. 您可以根据需要更改 for 循环。

# -*- coding: utf-8 -*-
import socket
import os
import sys

up_ip =[] #list to store the ip-addresses of server online
for x in range(100):  #here range is 0-100. You can change the range according to your comfort

    server_ip = '192.168.0.'+ str(x)
    print "Trying ,server_ip,... \n"

    rep = os.system('ping -c 1 ' + server_ip)

    if rep == 0:
        up_ip.append(server_ip)
        print '******************* Server Is Up **************** \n'
    else:
        print 'server is down \n'

print up_ip
于 2018-07-11T07:32:33.100 回答
0

此脚本在 Windows 上的 Git Bash (MINGW64) 上运行,并根据 ping 结果返回一条消息。

#!/bin/bash
#$1 should be something like "19.62.55"

if [ -z "$1" ]
  then
    echo "No identify of the network supplied, i.e. 19.62.55"
else
    ipAddress=$1

    for i in {1..256} ;do 
    (
        {
        ping -w 5 $ipAddress.$i ; 
        result=$(echo $?);
        } &> /dev/null


        if [ $result = 0 ]; then
            echo Successful Ping From : $ipAddress.$i
        else
            echo Failed Ping From : $ipAddress.$i
        fi &);
    done

fi
于 2018-02-02T13:33:58.227 回答
0

BSD的

对于我在 $(seq 1 254); 做 (ping -c1 -W5 192.168.1.$i >/dev/null && echo "192.168.1.$i" &) ; 完成

于 2020-05-13T20:38:22.063 回答
0

如果时间很重要(我知道这种感觉):

for i in {1..254}; do
echo -n -e "$i      \r"     
timeout --preserve-status .2  ping -c1 -q 10.0.0.$i  &> /dev/null
[ $? -eq 0 ]&&echo 10.0.0.$i is happy to serve to his master!
done # as I am

命令:

timeout --preserve-status .2  ping -c1 -q 10.0.0.107 &> /dev/null  ;echo $? 

返回 143 与不存在的 PC 和 0 与现有的 PC 并仅等待答案仅 0.2 秒,因为时间很重要!因此,我现在必须寻找丢失的钥匙。

于 2021-08-19T06:11:11.367 回答