Q. How do I find out if all host computers on the LAN are alive or dead from a Linux or Windows XP computer? My network subnet range is 192.168.1.0/24 and I'm using dual boot Debian Linux / XP SP2 computer.
A.You can use normal ping command and shell script loop statement to print the list of all LAN computers from a shell prompt.
Linux / UNIX one liner to ping all hosts on the LAN
Type the following command, enter:
$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
Output:
192.168.1.1 UP 192.168.1.1 UP 192.168.1.2 UP 192.168.1.5 UP ...... ... .. 192.168.1.254 UP
See previous article: Simple Linux and UNIX system monitoring with ping command and scripts.
A Note About Windows Workstation
If you are using Windows 2000 / XP / Vista, try something as follows at DOS / NT command prompt (Start > Run > CMD > Enter key):
c:> for /L %I in (1,1,254) DO ping -w 30 -n1 192.168.1.%I | find "Reply"
Read cmd.exe help page and batch scripting documentation for more information.
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- My 10 UNIX Command Line Mistakes
- Linux: 20 Iptables Examples For New SysAdmins

- 25 PHP Security Best Practices For Sys Admins
- The Novice Guide To Buying A Linux Laptop
- 10 Greatest Open Source Software Of 2009
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
Facebook it - Tweet it - Print it -


{ 27 comments… read them below or add one }
You would probably use
"for ip in $(perl -e '$,="\n"; print 0 .. 8;') ; do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done"on non GNU/Linux system, as seq does not exist on Solaris and OSX.
Ups, this is nicer, and faster.
for ip in $(perl -e '$,="\n"; print 1 .. 254;') ; do ping -t 1 -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; doneI’ve added a 1 sec. timeout on ping.
Looping in Perl just to print a sequence of numbers is really braindead.
Do you know fping ?
$ sudo apt-get install fping
$ fping -a -g 192.168.1.0/24 2> /dev/null
@Casper,
Thanks for sharing perl only code.
@Richard,
Sure, fping was covered some time ago..
I generally just use this “ping -b 192.168.1.255″ Which broadcasts a ping to the whole network at once.
What about Windows machines with MS firewall which default forbid ICMP replay ?
Maybe must use ARP cache after ping
another way…
for ((ip=1;ip/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; doneIf a host on your local network won’t answer on a ping request you could try arping, which does an arp request.
arping 192.168.1.1ARPING 192.168.1.1 from 192.168.1.226 eth0
Unicast reply from 192.168.1.1 [00:01:02:xx:xx:xx] 0.668ms
Another method is simply using nmap:
nmap -sP 192.168.1.0/24Something wrong with prev. comment… (< and > char)
for (( ip=1 ; ip<=254 ; ip++ )); do ping -c 1 -t 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done
Using nast ?
http://netsecure.alcpress.com/nast/
nast -m
best.
another option is installing arpwatch.
wont this command do ???
nbtscan 10.0.0.1-125
this checks all the computers whose ip address are in the range of 10.0.0.1 to 10.0.0.125 and displays only those which are ON and connected to the network !
Matthias, thumbs up for the nmap solution.
Even faster (produces a little bit of confusing output in the beginning but it does the job fast):
for ip in $(perl -e '$,="\n"; print 1 .. 254;') ; do ping -t 1 -c 1 192.168.146.$ip > /dev/null && echo "192.168.146.$ip UP" >> hosts.log || : & sleep 0.02; done; sleep 1;cat hosts.log;rm hosts.log
this is awesome
can anyone tell how to see the network address and system names in up in lan in linux..
i liked the nmap solution best as well, thanks Matthias for that.
check out the space after the n parameter: for /L %I in (1,1,254) DO ping -w 30 -n 1 192.168.1.%I | find “Reply”
smbtree -SN |grep \\\\ |cut -f2 |cut -d”\\” -f3
will give a list of netbios host responding on broadcast address
(smbtree is part of the samba suite)
#arp-scan -l
Very nice, all that. Thanks guys!
Here’s a batchfile i made that pings any range of adresses:
@echo off & For /L %%i in (%4,1,255) do @ping -n 1 %1.%2.%3.%%i | find “Received = 0″ >nul & if errorlevel 1 @echo %1.%2.%3.%%i
most of the code is to tidy the output up. Save as PINGER.bat
Type:
PINGER 192 168 0 0
**without** the dots to find the range 192.168.0.0 to 192.168.0.255
or any other address PINGER 145 233 2 0 etc
cheers
How would you do this on a Mac? I tried it and got the error -bash: seq: command not found
Thanks for ‘nast -m’ tip (3 years later ;) ) – liked it best.
@ lina – check out casper’s comment regarding non-Linux systems
Using cygwin on Windows, this did not work as expected.
It produced
192.168.1.1 UP
…
192.168.1.100 UP
…
for every IP address.
Problem is, this network is 192.168.2.1, not 192.168.1.1
Further investigation:
ping 192.168.2.1 produced a response from an IP from the ISP.
Know and Test what you are doing!
Hi, i cant find all hosts by nmap -sP 10.6.0.0/24
I know that router Mikrotik has got IP address 10.6.0.1, hi can i found with nmap ALL hosts at subnet? Which mode of nmap I have to use for this?
Could you help me, please? Thanks a lot.
Lukas