How to do it...

We can use Scapy, a mature network-analyzing, third-party library, to launch an ICMP scan. Since we would like to do it periodically, we need Python's sched module to schedule the scanning tasks.

Listing 3.7 shows us how to detect inactive machines, as follows:

#!/usr/bin/env python 
# Python Network Programming Cookbook, Second Edition -- Chapter - 3 
# This program is optimized for Python 2.7.12 and Python 3.5.2. 
# It may run on any other version with/without modifications. 
# Requires scapy-2.2.0 or higher for Python 2.7. 
# Visit: http://www.secdev.org/projects/scapy/files/scapy-latest.zip 
# As of now, requires a separate bundle for Python 3.x. 
# Download it from: https://pypi.python.org/pypi/scapy-python3/0.20 
 
 
import argparse 
import time 
import sched 
from scapy.all import sr, srp, IP, UDP, ICMP, TCP, ARP, Ether 
 
RUN_FREQUENCY = 10 
 
scheduler = sched.scheduler(time.time, time.sleep) 
 
 
def detect_inactive_hosts(scan_hosts): 
    """  
    Scans the network to find scan_hosts are live or dead 
    scan_hosts can be like 10.0.2.2-4 to cover range.  
    See Scapy docs for specifying targets.    
    """ 
    global scheduler 
    scheduler.enter(RUN_FREQUENCY, 1, detect_inactive_hosts,
(scan_hosts, )) inactive_hosts = [] try: ans, unans = sr(IP(dst=scan_hosts)/ICMP(), retry=0, timeout=1) ans.summary(lambda r : r.sprintf("%IP.src% is alive")) for inactive in unans: print ("%s is inactive" %inactive.dst) inactive_hosts.append(inactive.dst) print ("Total %d hosts are inactive" %(len(inactive_hosts))) except KeyboardInterrupt: exit(0) if __name__ == "__main__": parser = argparse.ArgumentParser(description='Python
networking utils') parser.add_argument('--scan-hosts', action="store",
dest="scan_hosts", required=True) given_args = parser.parse_args() scan_hosts = given_args.scan_hosts scheduler.enter(1, 1, detect_inactive_hosts, (scan_hosts, )) scheduler.run()

The output of this script will be something like the following command:

$ sudo python 3_7_detect_inactive_machines.py --scan-hosts=10.0.2.2-4
Begin emission:
.*...Finished to send 3 packets.
.
Received 6 packets, got 1 answers, remaining 2 packets
10.0.2.2 is alive
10.0.2.4 is inactive
10.0.2.3 is inactive
Total 2 hosts are inactive
Begin emission:
*.Finished to send 3 packets.
Received 3 packets, got 1 answers, remaining 2 packets
10.0.2.2 is alive
10.0.2.4 is inactive
10.0.2.3 is inactive
Total 2 hosts are inactive
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.15.29.119