Python 3 Single Threaded Ping Sweeper
I wouldn’t suggest this code be used for production (it’s very slow). We are using to demonstrate the difference in multi threading and single threading.
This is the single threaded version of the ping sweeper. The multi threaded version of the python pingsweeper is also available to study.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# going to hide the windows spawned import subprocess # parse out the CIDR to a list import ipaddress # colors https://en.wikipedia.org/wiki/ANSI_escape_code from colorama import init init() # Prompt the user to input a network address net_addr = input("Enter Network (192.168.1.0/24): ") # Create the network ip_net = ipaddress.ip_network(net_addr) # Get all hosts on that network all_hosts = list(ip_net.hosts()) # Configure subprocess to hide the console window info = subprocess.STARTUPINFO() info.dwFlags |= subprocess.STARTF_USESHOWWINDOW info.wShowWindow = subprocess.SW_HIDE # For each IP address in the subnet, # run the ping command with subprocess.popen interface # though it's much faster to use a small number like 15ms # you'll miss hosts that take a long time on their response # so I've chosen 500ms response for i in range(len(all_hosts)): output = subprocess.Popen(['ping', '-n', '1', '-w', '500', str(all_hosts[i])], stdout=subprocess.PIPE, startupinfo=info).communicate()[0] # normalize colors to grey print('\033[93m', end='') if "Destination host unreachable" in output.decode('utf-8'): print(str(all_hosts[i]), '\033[90m'+"is Offline (Unreachable)") elif "Request timed out" in output.decode('utf-8'): print(str(all_hosts[i]), '\033[90m'+"is Offline (Timeout)") else: # print colors in green if online print(str(all_hosts[i]), '\033[32m'+"is Online") |