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?
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?
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/
Cũng fping là cách nhẹ hơn nmap – urnenfeld
Kiểm tra xem this blog post có những gì bạn cần không.
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)
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 –
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). –
Trong IPv6, hãy sử dụng "ff02 :: 1". – Keltia
Trong Bash shell:
#!/bin/sh
COUNTER=1
while [ $COUNTER -lt 254 ]
do
ping 192.168.1.$COUNTER -c 1
COUNTER=$(($COUNTER + 1))
done
bạn có thể muốn thêm tùy chọn "-c1" vào lệnh ping ở đó ... –
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ổ.
Các tiện ích dòng lệnh nmap có thể làm điều này quá:
nmap -sP 192.168.1.*
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
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. –
Đâ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
Đ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
#!/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 /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
Đâ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
for i in $(seq 1 254); do ping -c1 192.168.11.$i; done
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].*?:"
-W 1
"). Vì vậy, nó sẽ kết thúc trong 1s :)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
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 đó.
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
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
'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