i m trying to do a simple implementation of a traceroute program. I keep getting socket has timed out error. Do you know what might be the problem and how can i solve it?Thanks........................................................................................................................
def ip_info(ip):
fake_HTTP_header = {
'referer': 'https://ipinfo.io/',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36',
'X-Forwarded-For': socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
}
res = requests.get('https://ipinfo.io/widget/'+str(ip) , headers = fake_HTTP_header)
return(json.loads(res.text))
def traceroute(ip, port):
# setam TTL in headerul de IP pentru socketul de UDP
totalHops = 5
proto_icmp = socket.getprotobyname('icmp')
proto_udp = socket.getprotobyname('udp')
for ttl in range(1, totalHops+ 1):
rx = socket.socket(socket.AF_INET, socket.SOCK_RAW, proto_icmp)
rx.settimeout(1)
rx.bind(('', port))
tx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, proto_udp)
tx.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
tx.sendto(b'salut', (ip, port))
try:
data, curr_addr = rx.recvfrom(512)
icmp_recv_socket.settimeout(3)
curr_addr = curr_addr[0]
print(ip_info(curr_addr))
except socket.error as socketerror:
print("Error: ", socketerror)
curr_addr = None
finally:
rx.close()
tx.close()
print(curr_addr)
if curr_addr == ip:
break
if __name__ == "__main__":
name = sys.argv[1]
addr = socket.gethostbyname(name)
print(addr)
traceroute(addr, 33434)
User contributions licensed under CC BY-SA 3.0