Ronnie Atuhaire
Ronnie Atuhaire's Blog

Ronnie Atuhaire's Blog

Ping Sweeper In Python

Ping Sweeper In Python

Ronnie Atuhaire's photo
Ronnie Atuhaire
Apr 25, 2022

4 min read

Subscribe to my newsletter and never miss my upcoming articles

Following an article, I wrote sometime back about pinging with Python, I promised that I would also write about a script that can do a ping sweeper and you don't have to be a network engineer to perform this.

If you missed that article, you can read it, especially if you don't know what exactly pinging is.

ping-removebg-preview.png

In this article, we shall basically use the subprocess module;

The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes.

It basically lets you start new applications right from the Python program you are currently writing.

So let's start by importing it;

import subprocess

I am currently connected to public wifi and its default gateway is 10.10.50.1. So I will loop through the 254 maximum hosts we can have on that level.

Before we proceed further, let's create a variable to that default gateway and leave the last octet in the IP which is the host portion of the IP address.

network="10.10.50."
IPs = []

Also created a list that will hold all our IPs that will be live.

Let's create a main for loop that we shall use to append the host and ping that particular host to the default gateway.

for host in range(1,255):
    IP = network + str(host)

Under the same for loop, let's spawn a new process using the subprocess module.

process = subprocess.run('ping -c 1 -w 1 '+ IP,stdout=subprocess.PIPE, shell=True)

The first command helps us ping with -c 1 which is a routing compartment identifier. The -w 1 is for a timeout in milliseconds.

The stdout=subprocess.PIPE will hide the output of the ping command

Setting the shell argument to a True value causes the subprocess to spawn an intermediate shell process, and tell it to run the command.

Now under the same indentation (for loop), let's get the IPs that are actually live when we ping with return codes.

if process.returncode == 0:
        IPs.append(IP)
        print(f" {IP} IS ALIVE !! ")

We also append that live IP to the IPs list variable that will help us get the total number of hosts available in that range.

Out of the for loop, we could add an information output if we're done and get the number of hosts.

I am also using a tool called Fing which helps me get all the network hosts.

Fing is one of the top-ranking free network scanner apps for PC and Mobile. One of the best ways to run network and IP analysis, device recognition and security checks.

When I compared the results everything was perfect.

So our entire script looks like this;

import subprocess

network="10.10.50."
IPs = []

for host in range(1,255):
    IP = network + str(host)

    process = subprocess.run('ping -c 1 -w 1 '+ IP,stdout=subprocess.PIPE, shell=True)

    if process.returncode == 0:
        IPs.append(IP)
        print(f" {IP} IS ALIVE !! ")

print(f"Ping completed successfully & there are {len(IPs)} IPs hosts!")

Running the above script which will take some time;

Note: You will need admin privileges to be able to run that script successfully. Also doing this on a Private network may be dangerous and maybe you may want to test it on your own home network.

There is also an ipaddress module that can help us get all network hosts.
Python's ipaddress module is an underappreciated gem from the Python standard library.

The ipaddress provides the capabilities to create, manipulate and operate on IPv4 and IPv6 addresses and networks.

import ipaddress

mynet = ipaddress.ip_network('192.168.0.0/16') 
for host in mynet.hosts():                    
    host = str(host)
    print(host

The above will print all the hosts in that range and the last one would be 192.168.255.254

Find all the code in this article here .

Conclusion

Once again, hope you learned something today from my little closet.

Please consider subscribing or following me for related content, especially about Tech, Python & General Programming.

You can show extra love by buying me a coffee to support this free content and I am also open to partnerships, technical writing roles, collaborations and Python-related training or roles.

Buy Ronnie A Coffee You can also follow me on Twitter : Waiting for you!
Share this