import socket
import struct
import time
def probe_mtu(target_ip, start_mtu=1480, end_mtu=1580):
for mtu in range(start_mtu, end_mtu):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, mtu)
try:
sent_time = time.time()
sock.sendto(b'X' * mtu, (target_ip, 33434))
sock.settimeout(3)
try:
sock.recvfrom(1)
except socket.timeout:
print(f"Probe MTU: {mtu} succeeded")
return mtu
except socket.error as e:
print(f"Probe MTU: {mtu} failed with error {e}")
return mtu
except socket.error as e:
print(f"Probe MTU: {mtu} failed with error {e}")
finally:
sock.close()
target_ip = "223.5.5.5"
mtu_value = probe_mtu(target_ip)
print(f"Estimated MTU of {target_ip} is {mtu_value} bytes.")