Ping网络范围并返回响应主机的最快方式?

cczfrluj  于 2022-10-23  发布在  Linux
关注(0)|答案(9)|浏览(165)

约束条件:
1.速度很重要。
2.我被允许ping一次。
我正在讨论是使用Python还是shell脚本。有比bash更快的方法吗?
这是当前的代码,

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

还有比这更快的吗?

thigvfpy

thigvfpy1#

您应该使用NMAP:

nmap -T5 -sP 192.168.0.0-255
ttvkxqim

ttvkxqim2#

以下(邪恶)代码的运行速度是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秒...

7ajki6be

7ajki6be3#

试着这样做,以获得一个独特的列表。
ping -c 5 -b 10.10.0.255 | grep 'bytes from' | awk '{ print $4 }' | sort | uniq
另一种方法(获取实时主机):
fping -ag 192.168.1.0/24

vu8f3i0k

vu8f3i0k4#

尝试这两个命令,亲自了解为什么ARP更快:

ping:

对于$(Seq 1 254)中的IP;执行ping-c 1 10.185.0.$ip>/dev/空;[$?-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”||:;完成

xvw2m8pv

xvw2m8pv5#

这是用于在192.168.0.0-192.168.0.100范围内执行ping操作的python代码。你可以根据你的舒适感换成循环。


# -*- 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
owfi6suc

owfi6suc6#

此脚本在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
r6hnlfcb

r6hnlfcb7#

BSD的
FOR I in$(Seq 1 254);do(ping-C1-W5 192.168.1.$i>/dev/NULL&&ECHO“192.168.1.$I”&);DONE

vbopmzt1

vbopmzt18#

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

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 $?

如果不存在PC,则返回143,如果存在PC,则返回0,并且只等待0.2秒,因为时间很重要!因此,我现在得去找我丢失的钥匙。

cpjpxq1n

cpjpxq1n9#

我真的很喜欢最初的答复,但它没有给出我想要的顺序。
我只是做了一点不同的事情,效果很好。
对于{int1..int2}中的IP,执行ping-c 1 xxx.$ip|grep“Bytes from”Done

相关问题