map maker v3.py (functioning?) last ping 1.0.212.120 white

import os 
 import socket 
 import struct 
 from ping3 import ping 
 from PIL import Image 
 
 print("start running") 
 
 
 def ip_to_int(ip): 
     int_ip = struct.unpack("!I", socket.inet_aton(ip))[0] 
     return int_ip 
 
 def int_to_ip(i): 
     ip = socket.inet_ntoa(struct.pack("!I", i)) 
     return ip 
 
 def hilbert_curve(n): 
     points = [(0, 0)] 
     for i in range(n): 
         gray = [((k >> i) ^ (k >> (i + 1))) & 1 for k in range(2 ** i)] 
         points = _rot(points, gray) 
     return points 
 
 def _rot(points, gray): 
     rot = [(1, 0), (0, 1), (-1, 0), (0, -1)] 
     last = points[-1] 
     for code in gray: 
         last = (last[0] + rot[code][0], last[1] + rot[code][1]) 
         points.append(last) 
     return points 
 
 def ping_ip(ip): 
     try: 
         response_time = ping(ip, timeout=1) 
         return 1 if response_time is not None else 0 
     except OSError: 
         return -1 
 
 def main(): 
     img_size = 65536 
     n = 16 
     print(f"img size ={img_size}, n={n} Creating a blank image with a white background") 
 
     img = Image.new("1", (img_size, img_size), color="grey") 
     pixels = img.load() 
     curve_filename = "hilbert_curve v2.txt" 
     if os.path.exists(curve_filename): 
         with open(curve_filename, "r") as f: 
             print("reading Hilbert curve coordinates file") 
             curve_points = [tuple(map(int, line.strip().split())) for line in f.readlines()] 
     else: 
         print("Generating Hilbert curve coordinates file") 
         curve_points = hilbert_curve(n) 
         with open(curve_filename, "w") as f: 
             for x, y in curve_points: 
                 f.write(f"{x} {y}\n") 
 
     ip_range = 2 ** 32 
     start_ip_int = 0 
     if os.path.exists('ping_status.txt'): 
         with open('ping_status.txt', 'r') as f: 
             lines = f.readlines() 
             if len(lines) > 0: 
                 last_line = lines[-1].strip() 
                 last_ip, last_result = last_line.split() 
                 start_ip_int = ip_to_int(last_ip) + 1 
                 print(f"Resuming from IP address {last_ip}, result = {last_result}") 
     with open('ping_status.txt', 'a') as f: 
         print("pinging and writing to ping status.txt") 
         for i in range(start_ip_int, ip_range): 
             ip = int_to_ip(i) 
             x, y = curve_points[i % len(curve_points)] 
             result = ping_ip(ip) 
             print(f"result {result} for ip {ip}") 
             if result == -1: 
                 f.write(f"{ip} black\n") 
                 pixels[x, y] = 0 
             else: 
                 pixels[x, y] = result 
                 if result == 0: 
                     f.write(f"{ip} white\n") 
                 else: 
                     f.write(f"{ip} black\n") 
             if (i + 1) % (2 ** 24) == 0: 
                 img.save("ping_map.png") 
 
     img.save("ping_map.png") 
     print("Finished pinging IP addresses and saved final image") 
 if __name__ == '__main__': 
     main()