Olá! Estou tentando fazer um tracerouter para obter o endereço ip de cada roteador em que meu conjunto de pacotes irá passar até chegar ao local de destino(um site por exemplo). Porém no meu código nada acontecer e gostaria de saber como eu solucionaria esse problema.
Segue abaixo o código:
"""A very simple Python traceroute(8) implementation"""
import socket
import random
__all__ = ['Tracer']
class Tracer(object):
def __init__(self, dst='www.google.com.br', hops=30):
"""Initializes a new tracer object
Args:
dst (str): Destination host to probe
hops (int): Max number of hops to probe
"""
self.dst = dst
self.hops = hops
self.ttl = 1
# Pick up a random port in the range 33434-33534
self.port = random.choice(range(33434, 33535))
def run(self, e=None):
"""Run the tracer
Raises:
IOError"""
try:
dst_ip = socket.gethostbyname(self.dst)
except socket.error as e:
raise IOError('Unable to resolve {}: {}', self.dst, e)
text = 'traceroute to {} ({}), {} hops max'.format(
self.dst,
dst_ip,
self.hops
)
print(text)
while True:
receiver = self.create_receiver()
sender = self.create_sender()
sender.sendto(b'', (self.dst, self.port))
addr = None
try:
data, addr = receiver.recvfrom(1024)
except socket.error:
raise IOError('Socket error: {}'.format(e))
finally:
receiver.close()
sender.close()
if addr:
print('{:<4} {}'.format(self.ttl, addr[0]))
else:
print('{:<4} *'.format(self.ttl))
self.ttl += 1
if addr[0] == dst_ip or self.ttl > self.hops:
break
def create_receiver(self):
"""
Creates a receiver socket
Returns:
A socket instance
Raises:
IOError
"""
s = socket.socket(
family=socket.AF_INET,
type=socket.SOCK_RAW,
proto=socket.IPPROTO_ICMP
)
try:
s.bind(('192.168.0.18', self.port))
except socket.error as e:
raise IOError('Unable to bind receiver socket: {}'.format(e))
return s
def create_sender(self):
"""
Creates a sender socket
Returns:
A socket instance
"""
s = socket.socket(
family=socket.AF_INET,
type=socket.SOCK_DGRAM,
proto=socket.IPPROTO_UDP
)
s.setsockopt(socket.SOL_IP, socket.IP_TTL, self.ttl)
return s
if __name__ == "__main__":
tracert = Tracer().run()
Pergunta
TitoGalego
Olá! Estou tentando fazer um tracerouter para obter o endereço ip de cada roteador em que meu conjunto de pacotes irá passar até chegar ao local de destino(um site por exemplo). Porém no meu código nada acontecer e gostaria de saber como eu solucionaria esse problema.
Segue abaixo o código:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.