Let’s write a very simple Network scanning tool in Python !
Full code : Github
Concept of Network Scaning
ARP ( address resolution Protocol ) : This network protocol is used to map IP addresses to MAC addresses for the devices present in the network .
We are going to send an ARP packet to all the ip addresses in the network . If the machine is alive, it will send back an ARP response packet giving its MAC address . This is how we will map all the devices in the network .
Now , lets begin with the program .
First we imported , two modules :
OS : we will use it to run shell commands from our program .
argparse : we will use this module to parse arguments given from the command line .
Scapy is the most important module that we are going to use in the program . This module can create customized packets as per our requirements . Scapy is not pre installed with python .
So , first we tried to import it ,if it is already installed it will get imported . But if it is not installed , it will raise an exception , that is why we have taken care of the exception . If the exception rises , our program will first install the scapy module with the help of pip3 and then it will import it .
Next , we created a function named argument . first we created an instance ti the ArgumentParser() class . Then we added an option into it – “-t” or “–target” , and its destination variable is set to be target . A help message is also included for usage information . Finally we parsed the arguments given from the command line and returned them as argument function’s return value .
Then , we created a function named to checker to check if the supplied argument target is not empty . It accepts an argument target , which is going to be the ip or ip range . If it is empty , an informational message is displayed and the program is exited .
scan is the most important function of our program . This function accepts an argument , target ip or ip range . First we created an object from scapy’s ARP class , and set the IP field to our target IP or IP range .
Then we created an another object from scapy’s Ether class.ff:ff:ff:ff:ff:ff is set as destination MAC field of this object . This will make packet reach to all computers on the network .
An ARP packet has two layers , we need to glue this two layers . “/” is used to glue two layers in the scapy module . we stored the final packet in a variable named c.
finally , scapy’s srp method is used to send this packet . timeout is set to 1 second , which means if the response doesnt comeback within one second of request then move on to the next address . This function will give two lists , answered response and unanswered requests . We are only going to store answered response in a variable named result .
Finally we iterating the answered list and printing the source IP and corresponding source MAC field .
argument function is called and the parsed arguments are stored in ip variable. Next , the target argument is checked by checker module. Finally , the scan function is called by supplying the target IP or target IP range .
Full code : Github
For more info on the tool : python3 network_scanner.py -h or –help
Usage : python3 network_scanner.py -t TARGET_IP_RANGE
Voila , A simple Network Scanner in Python !