سؤال

هل هناك طريقة تعتمد على سطر الأوامر لإرسال الأصوات إلى كل جهاز كمبيوتر في شبكة فرعية؟ يحب

for(int i = 1; i < 254; i++)
    ping(192.168.1.i);

لفرض قرار ARP؟

هل كانت مفيدة؟

المحلول

أود أن أقترح استخدام الحفلات الصحيح مع خيار القناع ، لأنك لا تقيد نفسك في Ping.

fping -g 192.168.1.0/24

سيكون الاستجابة سهلة التحليل في البرنامج النصي:

192.168.1.1 is alive
192.168.1.2 is alive
192.168.1.3 is alive
192.168.1.5 is alive
...
192.168.1.4 is unreachable
192.168.1.6 is unreachable
192.168.1.7 is unreachable
...

ملاحظة: باستخدام الوسيطة -a سوف تقيد الإخراج إلى عناوين IP التي يمكن الوصول إليها ، قد ترغب في استخدامه وإلا فإن الحفلات الصية ستطبع أيضًا عناوين لا يمكن الوصول إليها:

fping -a -g 192.168.1.0/24

من الرجل:

الحفلات الصحيح يختلف عن بينغ في ذلك يمكنك تحديد أي عدد من الأهداف في سطر الأوامر ، أو تحديد ملف يحتوي على قوائم الأهداف إلى Ping. بدلاً من إرسال هدف واحد حتى يمر بالخارج أو يرد ، الحفلات الصحيح سوف يرسل حزمة بينغ وانتقل إلى الهدف التالي بطريقة مستديرة.

مزيد من المعلومات: http://fping.org/

نصائح أخرى

ليس كل الآلات لديها nmap متاح ، لكنها أداة رائعة لأي اكتشاف شبكة ، وبالتأكيد أفضل من التكرار من خلال المستقلة ping الأوامر.

$ nmap -n -sp 10.0.0.0/24

Starting Nmap 4.20 ( http://insecure.org ) at 2009-02-02 07:41 CST
Host 10.0.0.1 appears to be up.
Host 10.0.0.10 appears to be up.
Host 10.0.0.104 appears to be up.
Host 10.0.0.124 appears to be up.
Host 10.0.0.125 appears to be up.
Host 10.0.0.129 appears to be up.
Nmap finished: 256 IP addresses (6 hosts up) scanned in 2.365 seconds

البث بينغ:

$ ping 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.154: icmp_seq=0 ttl=64 time=0.104 ms
64 bytes from 192.168.1.51: icmp_seq=0 ttl=64 time=2.058 ms (DUP!)
64 bytes from 192.168.1.151: icmp_seq=0 ttl=64 time=2.135 ms (DUP!)
...

(أضف -b خيار على Linux)

في باش شل:

#!/bin/sh

COUNTER=1

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

يمكن أن تقوم أداة NMAP بسطر الأوامر أيضًا: أيضًا:

nmap -sP 192.168.1.*

لقد جئت للتو حول هذا السؤال ، لكن الإجابات لم ترضي. لذلك تدحرجت بلدي:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:"
  • الميزة 1: لا تحتاج إلى تثبيت أي أداة إضافية
  • ميزة 2: إنها سريعة. يفعل كل شيء بالتوازي مع timout لكل ping من 1s ("-W 1"). لذلك سوف ينتهي في 1S :)
  • الميزة 3: الإخراج مثل هذا
64 bytes from 192.168.0.16: icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from 192.168.0.12: icmp_seq=1 ttl=64 time=1.78 ms
64 bytes from 192.168.0.21: icmp_seq=1 ttl=64 time=2.43 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.97 ms
64 bytes from 192.168.0.11: icmp_seq=1 ttl=64 time=619 ms

تحرير: وهنا نفس البرنامج النصي ، لأنه عندما لا يكون لدى XARGS علامة -P ، كما هو الحال في OpenWrt (اكتشفت للتو)

for i in $(seq 255);
do
 ping -W 1 -c 1 10.0.0.$i | grep 'from' &
done

هذا هو تعديل @David-Rodríguez-dribeas الإجابة أعلاه ، والذي يدير جميع الأجنحة بالتوازي (أسرع بكثير) ويظهر فقط الإخراج لعناوين IP التي تُرجع بينج.

export COUNTER=1
while [ $COUNTER -lt 255 ]
do
    ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
    COUNTER=$(( $COUNTER + 1 ))
done
for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

إضافة أ -t 1 ينتظر ثانية واحدة فقط قبل الخروج. هذا يحسن السرعة كثيرًا إذا كان لديك عدد قليل من الأجهزة المتصلة بهذه الشبكة الفرعية.

FOR /L %i in (1,1,254) DO PING 192.168.1.%i -n 1 -w 100 | for /f "tokens=3 delims=: " %j in ('find /i "TTL="') do echo %j>>IPsOnline.txt

بموجب Linux ، أعتقد أن Ping -B 192.168.1.255 ستعمل (192.168.1.255 هو عنوان البث لعام 192.168.1.*) ولكن IIRC لا يعمل تحت Windows.

لقد تأخرت ولكن هنا نص صغير قمت به لهذا الغرض الذي أديره في Windows PowerShell. يجب أن تكون قادرًا على نسخها ولصقها في ISE. سيؤدي ذلك بعد ذلك إلى تشغيل أمر ARP وحفظ النتائج في ملف .txt وفتحه في Notepad.

# Declare Variables
$MyIpAddress
$MyIpAddressLast

# Declare Variable And Get User Inputs
$IpFirstThree=Read-Host 'What is the first three octects of you IP addresses please include the last period?'
$IpStart=Read-Host 'Which IP Address do you want to start with? Include NO periods.'
$IpEnd=Read-Host 'Which IP Address do you want to end with? Include NO periods.'
$SaveMyFilePath=Read-Host 'Enter the file path and name you want for the text file results.'
$PingTries=Read-Host 'Enter the number of times you want to try pinging each address.'

#Run from start ip and ping
#Run the arp -a and output the results to a text file
#Then launch notepad and open the results file
Foreach($MyIpAddressLast in $IpStart..$IpEnd)
{$MyIpAddress=$IpFirstThree+$MyIpAddressLast
    Test-Connection -computername $MyIpAddress -Count $PingTries}
arp -a | Out-File $SaveMyFilePath
notepad.exe $SaveMyFilePath
#!/bin/sh

COUNTER=$1

while [ $COUNTER -lt 254 ]
do
 echo $COUNTER
 ping -c 1 192.168.1.$COUNTER | grep 'ms'
 COUNTER=$(( $COUNTER + 1 ))
done

#specify start number like this: ./ping.sh 1
#then run another few instances to cover more ground
#aka one at 1, another at 100, another at 200
#this just finds addresses quicker. will only print ttl info when an address resolves
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top