2009-02-02 26 views
37

Có cách nào dựa trên dòng lệnh để gửi ping đến từng máy tính trong mạng con không? Giống nhưGửi một ping đến từng IP trên mạng con

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

để thực thi độ phân giải arp?

+1

'for i in $ (seq 1 254); làm ping -c1 -t 1 192.168.11. $ i; done' - Native của nó, không có công cụ của bên thứ ba. – YumYumYum

Trả lời

26

tôi sẽ đề nghị việc sử dụng fping với các tùy chọn mặt nạ, vì bạn không hạn chế mình trong ping.

fping -g 192.168.1.0/24 

Câu trả lời sẽ dễ dàng để phân tích trong một kịch bản:

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 
... 

Lưu ý: Sử dụng đối số -a sẽ hạn chế đầu ra đến các địa chỉ ip có thể truy cập, bạn có thể muốn sử dụng nó bằng cách khác fping cũng sẽ in địa chỉ unreachable:

fping -a -g 192.168.1.0/24 

Từ người đàn ông:

fping khác với ping trong đó bạn có thể chỉ định bất kỳ số lượng các mục tiêu trên dòng lệnh, hoặc chỉ định một tập tin chứa danh sách các mục tiêu ping. Thay vì gửi cho một mục tiêu cho đến khi nó hết hạn hoặc câu trả lời, fping sẽ gửi gói ping và chuyển sang mục tiêu tiếp theo theo kiểu vòng tròn.Thông tin

thêm: http://fping.org/

+1

Cũng fping là cách nhẹ hơn nmap – urnenfeld

37

Broadcast ping:

$ 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!) 
... 

(Thêm một lựa chọn -b trên Linux)

+1

lưu ý: bạn có thể cần phải thêm "-b" trong đó tùy thuộc vào phiên bản/nền tảng –

+2

Ngoài ra, không phải tất cả hệ điều hành sẽ phản hồi ping phát (theo mặc định). –

+2

Trong IPv6, hãy sử dụng "ff02 :: 1". – Keltia

14

Trong Bash shell:

#!/bin/sh 

COUNTER=1 

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

bạn có thể muốn thêm tùy chọn "-c1" vào lệnh ping ở đó ... –

2

Dưới Linux, tôi nghĩ ping 192.168.1.255 -b sẽ hoạt động (192.168.1.255 là địa chỉ quảng bá cho 192.168.1. *) tuy nhiên IIRC không hoạt động trong các cửa sổ.

7

Các tiện ích dòng lệnh nmap có thể làm điều này quá:

nmap -sP 192.168.1.* 
96

Không phải tất cả các máy có nmap sẵn, nhưng đó là một công cụ tuyệt vời cho bất kỳ network discovery, và chắc chắn tốt hơn so với iterating qua ping lệnh độc lập.

 
$ 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 
+0

Câu trả lời hay nhất cho đến nay vì đây là câu trả lời đầu tiên tương thích với thực tế không phải tất cả mạng con đều có cùng kích thước và sử dụng/24 ký hiệu có thể được tổng quát hóa cho bất kỳ subnet kích thước nào. –

+0

Đây là câu trả lời tốt hơn so với ngoại lệ vì nó linh hoạt hơn và điều chỉnh cho các mạng khác nhau. – charmoniumQ

+0

Điều này thực sự phải là câu trả lời được chấp nhận. Nó sạch hơn và linh hoạt hơn nhiều. – Routhinator

0
#!/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 
3
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 
6

Đây là một sửa đổi của @ david-Rodríguez-dribeas trả lời ở trên, chạy tất cả các ping song song (nhanh hơn nhiều) và chỉ hiển thị đầu ra cho các địa chỉ ip mà trả lại ping .

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

Tôi chỉ đến xung quanh câu hỏi này, nhưng câu trả lời không hài lòng tôi. Vì vậy, tôi cuộn của riêng tôi:

echo $(seq 254) | xargs -P255 -I% -d" " ping -W 1 -c 1 192.168.0.% | grep -E "[0-1].*?:" 
  • Advantage 1: Bạn không cần phải cài đặt bất kỳ công cụ bổ sung
  • Advantage 2: Đó là nhanh chóng. Nó làm mọi thứ song song với thời gian chờ cho mỗi lần ping 1s ("-W 1"). Vì vậy, nó sẽ kết thúc trong 1s :)
  • Advantage 3: Đầu ra là như
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 

Chỉnh sửa này: Và đây cũng giống như kịch bản, khi xargs của bạn không có cờ -P, như trường hợp ở openwrt (tôi chỉ phát hiện ra)

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

for i in $(seq 1 254); do ping -c1 -t 1 192.168.11.$i; done

Thêm -t 1 chỉ đợi một giây trước khi thoát. Điều này cải thiện tốc độ rất nhiều nếu bạn chỉ có một vài thiết bị kết nối với subnet đó.

+0

Tuyệt vời. 1) bản địa của nó 2) tôi không phải cài đặt tất cả những công cụ crap trong Arduino. – YumYumYum

0

Tôi đến muộn nhưng đây là một tập lệnh nhỏ mà tôi đã thực hiện cho mục đích này mà tôi chạy trong Windows PowerShell. Bạn sẽ có thể sao chép và dán nó vào ISE. Điều này sau đó sẽ chạy lệnh arp và lưu kết quả vào một tệp .txt và mở nó trong 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 
Các vấn đề liên quan