Advertisement
Guest User

Stupid code

a guest
May 2nd, 2025
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.93 KB | None | 0 0
  1. """High-level ICMP (fallback)"""
  2. import socket
  3. import os
  4. import struct
  5. import time
  6.  
  7. ICMP_ECHO_REQUEST = 8
  8. ICMP_ECHO_RESPONSE = 0
  9.  
  10. def checksum(data: bytearray):
  11.     """ICMP checksum function"""
  12.  
  13.     if len(data) % 2:
  14.  
  15.         data += b'\x00'
  16.  
  17.     total: int = 0
  18.  
  19.     for i in range(0, len(data), 2):
  20.  
  21.         w = (data[i] << 8) + data[i + 1]
  22.         total += w
  23.  
  24.         total = (total & 0xFFFF) + (total >> 16)
  25.  
  26.     total = ~total & 0xFFFF
  27.  
  28.     return total
  29.  
  30. def build_icmp_packet(pid: int, seq: int, data: bytearray = b''):
  31.     """Builds ICMP packets with the correct sum"""
  32.  
  33.     header = struct.pack('bbHHh', ICMP_ECHO_REQUEST, 0, 0, pid, seq)
  34.  
  35.     packet = header + data
  36.  
  37.     chksum = checksum(packet)
  38.  
  39.     header = struct.pack('bbHHh', ICMP_ECHO_REQUEST, 0, chksum, pid, seq)
  40.  
  41.     packet = bytearray(header) + data
  42.  
  43.     return packet
  44.  
  45. def icmp_ping(data, host, timeout: float):
  46.     """"Basic ICMP response ping"""
  47.  
  48.     icmp_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
  49.     icmp_socket.settimeout(timeout)
  50.  
  51.     pid = os.getpid() &0xFFFF
  52.     packet = build_icmp_packet(pid, 1, data)
  53.  
  54.     rt = time.time()
  55.  
  56.  
  57.     try:
  58.  
  59.         host_byname = socket.gethostbyname(host)
  60.  
  61.         icmp_socket.sendto(packet, (host_byname, 0))
  62.  
  63.         recv_packet, addr = icmp_socket.recvfrom(1024)
  64.         end_time = (time.time() - rt) * 1000
  65.  
  66.         print(f"Ping to {host}. RTT: {end_time:.2f}ms\nRecieved: {repr(recv_packet)} from {addr}")
  67.  
  68.     except socket.timeout as err:
  69.  
  70.         print(f"Connection to {host} || {host_byname} timed out after {timeout}s. Error: {err}")
  71.  
  72.     except PermissionError as err:
  73.  
  74.         print(f"You aren't allowed, {err}")
  75.  
  76.     except socket.gaierror as err:
  77.  
  78.         print(f"Could not resolve the domain {host} || {host_byname}. Error: {err}")
  79.  
  80.     finally:
  81.  
  82.         icmp_socket.close()
  83.  
  84. icmp_ping(bytearray("", encoding="utf-8"), "8.8.8.8", 5)
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement