Help with ip search script

Hi

Obviously first time poster here. I have been set the task of creating a network diagram for each of our clients in the business i work for. After identifying ip adresses of firewalls name servers and the like im got to the point where i found it impracticle to go through 254 ip address and check for a responce. (Im doing this work remotley through a VPN/Putty combination)

As im new to scripting (Only started about a week ago) im not sure on much of the basics so have been making my way through man pages and google sites all week :slight_smile:

So my question. So far, my code is as follows:

#!/bin/bash
#Author: John Crombie
#Small script to ping all ip's within a range specified and to write to file all ips that return a responce.


echo Debugging!

echo xxx.xxx.xxx.x Successfull Pings:>/home/johnc/Scripts/inprogress/ipSearch/ping.log

#for i in {1..254}
for i in {1..5}
do
        ping -c 1 xxx.xxx.xxx.$i>>/home/johnc/Scripts/inprogress/ipSearch/ping.log
done

(Replace xxx with correct IP naturally)

Now the problem. While it does what i want the log files is a little clumsy to go through so i want to do the following:

  1. send all ip address with no responce to ping to /dev/null
  2. go from the sample output below to just the ip address of the successfull ping attempts.

EXAMPLE:
Before:
PING xxx.xxx.xxx.253 (xxx.xxx.xxx.253) 56(84) bytes of data.

--- xxx.xxx.xxx.253 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

PING xxx.xxx.xxx.254 (xxx.xxx.xxx.254) 56(84) bytes of data.
64 bytes from xxx.xxx.xxx.254: icmp_seq=1 ttl=63 time=33.3 ms

--- xxx.xxx.xxx.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 33.368/33.368/33.368/0.000 ms

After:
xxx.xxx.xxx.254

So the thoughts i had on this was that i need to firstly add some additional constraints on the ping command and then to pipe the ping.log file through a grep comman of some kind and finishing of with some sort of restrictive redirection on the results of grep....

But i would really value some input.

Let me know if i can provide anymore info or this inst clear. Or its in the wrong forum?

Regards,
John.

 
for i in {1..5}
do
 logFile="/home/johnc/Scripts/inprogress/ipSearch/ping.log"
 ping -c 5 -w 5 -n xxx.xxx.xxx.$i | grep -q "bytes from" && echo "$i" >> $logFile || echo "$i not Reachable"
done

Without grep:

logFileOk="/home/johnc/Scripts/inprogress/ipSearch/ping.log"
logFileNOk="/home/johnc/Scripts/inprogress/ipSearch/ping_err.log"
for octet in {1..254}
do
    ping -c 1 -W 1 -q -n xxx.xxx.xxx.$octet >/dev/null 2>&1 && echo "$octet" >> $logFileOk || echo "$octet" >> $logFileNOk
done

Thanks to both responces.

I went with the first purely due to the fact that it was there first so i went of and played with it for a while before coming back online.

@pludi: may i ask what octet is for?

this is what i ended up with:

#!/bin/bash
#Author: John Crombie
#Small script to search single network for attached computers

echo "Enter the ip address base: (eg: 100.10.1.)"
echo -n "Address: "
read ipBase

for i in {1..254}
do
        successLogFile="/home/johnc/Scripts/working/NetworkSearch/pingSuccess.log"
        failLogFile="/home/johnc/Scripts/working/NetworkSearch/pingFail.log"

        ping -c 5 -w 5 -n $ipBase$i | grep -q "bytes from" && echo "$ipBase$i" >> $successLogFile || echo "$ipBase$i not Reachable" >> $failLogFile
done

If you can think of things i might add to make it more efficient please dont hesitate to ask.

Regards,
John Crombie

octet in my example is just a variable name (like ipBase or i in your script), and named thus because the "parts" of an IP address are usually called "octets".

Thanks

I ment why octet, what did it signify, as opposed to what is it for like i asked so thanks for answering what i ment to ask but didnt...:wink:

And Octet huh? Due to the number of bits each "part" is made of? Or some other reason?

Because a Byte isn't necessarily 8 bits, but the number of bits used by a system to encode a character. Usually that's 8 bits, but in places where it's defined that 8 bits are needed the word Octet is usually used.