Link to home
Start Free TrialLog in
Avatar of Thor2923
Thor2923Flag for United States of America

asked on

I need a script or tool to PING live IPs in a block of 254 addresses

I have a block of 254 IPs and want to set up some statics, but the DHCP in the switch is randomly changing them. I want to find them quickly and lock them in for good. Does anyone have a tool or script?
ASKER CERTIFIED SOLUTION
Avatar of Aeriden
Aeriden
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Steve Knight
Aside from such tools, look in the ARP table of the switch, or from a PC on the same subnet, e.g.

ARP -A

You can PING all hosts quickly then look at the arp table as they go along too with something like this batch file (save it as .cmd):

@echo off
set subnet=192.168.1
set wait=50

for /l %%a in (1,1,254) do (
  title PINGing %subnet%.%%a
  ping -n 1 -w %wait% %subnet%.%%a > NUL 2>&1
  arp -A | find "%subnet%.%%a  " | find /v "Interface"
)

Open in new window


That will run through all IP's 1-254 on the subnet defined, and then take the output of the ARP command as it goes along to get the mac address for each - if you wait until the end of the run of all in a subnet the arp table may not still have all entries.

or slightly more complicated this pings each IP and picks up the hostname from the PING line (if yours shows it here) and then does the ARP to find Mac address and sends output for IP, name, mac address.  Save it as "findmac.cmd" say then you can run as findmac > file.csv from commandline to get a csv file say.

@echo off
setlocal enabledelayedexpansion
set subnet=192.168.1
set wait=40

for /l %%a in (1,1,254) do (
  title PINGing %subnet%.%%a
  set Name=*NotFound*
  for /f "tokens=2 delims=[ " %%N in ('ping -a -n 1 -w %wait% %subnet%.%%a ^| find /i "Pinging"') do set Name=%%N
  for /f "tokens=1-2 delims= " %%X in ('arp -A ^| find "%subnet%.%%a  " ^| find /v "Interface"') do echo %subnet%.%%a,!Name!,%%Y
)

Open in new window


Steve
This Powershell script completes in a matter of seconds (I think 6 seconds for all 255 IPs)

function Check-Online {
       param(
              $computername
       )
 
       test-connection -count 1 -ComputerName $computername -TimeToLive 5 -asJob |
       Wait-Job |
       Receive-Job |
       Where-Object { $_.StatusCode -eq 0 } |
       Select-Object -ExpandProperty Address
}
 
$ips = 1..255 | ForEach-Object { "10.10.10.$_" }
$online = Check-Online -computername $ips

$online

This code pings an IP segment from 10.10.10.1 to 10.10.10.255 and returns only those IPs that respond.

From Powershell.com
From a linux host, you can send a ping packet to broadcast address and then receive ping echos from live IPs :

ping -b 192.168.1.255  

(if the subnet is 192.168.1.x)

However, Windows hosts do not answer pings sent to broadcast addresses

You may want to try the following utility instead:

http://www.angryip.org/w/Home
Always good to know that providing a script (as asked for) to do what was asked by several of us is ignored without comment.  Doesn't hurt to give feedback when you get around to closing a question a fortnight later Thor2923...