我一直在努力让我的traceroute启动和运行,我希望得到一些帮助。我在Linux虚拟机上用python2.7运行这个程序。下面是我的源代码(请忽略第一行的间距;我很难弄清楚SO的代码格式化工具,但在本地副本中缩进是正确的。)
def main(dest_name):
dest_addr = socket.gethostbyname(dest_name)
# Define UDP and ICMP
udp = socket.getprotobyname('udp')
icmp = socket.getprotobyname('icmp')
timer = 1
port = 54321
maxHops = 40
totalRTT = 0
while True:
# Create sender and receiver. Sender uses UDP, receiver uses IDMP
sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp)
# Assign TTL to sender, increment TTL
sender.setsockopt(socket.SOL_IP, socket.IP_TTL, timer)
receiver = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
receiver.settimeout(15.0)
# Bind socket and send message from sender to receiver
receiver.bind(("", port))
sender.sendto("", (dest_name, port))
# Ensures that not receiving won't stall the program
# receiver.setblocking(0)
addr = None
name = None
count = 0
try:
# Keep track of RTT
startTime = time.time()
# Reads an array of 512-byte sized blocks from sender into addr
(_,addr) = receiver.recvfrom(512)
addr = addr[0]
# Try to get site name
try:
name = socket.gethostbyaddr(addr)[0]
except socket.error:
name = addr
# Process socket errors
except socket.error as exc:
pass
# Close both sockets
finally:
sender.close()
receiver.close()
endTime = time.time()
# Record RTT, total RTT, convert to ms
RTT = (endTime - startTime) * 1000
totalRTT += RTT
if addr is not None:
host = "%s (%s)" % (name, addr)
else:
host = "*"
print("%d\t%s" % (timer, host))
print(" %f" % RTT + " ms")
timer += 1
if addr == dest_addr or timer > maxHops:
print("Total RTT: %f\n" % totalRTT)
print("Hop count: %d\n" % timer)
break
if __name__ == "__main__":
main('www.google.com')
我的输出如下所示:
1 129.22.144.2 (129.22.144.2)
3.091097 ms
2 10.2.0.98 (10.2.0.98)
4.683971 ms
3 10.2.3.169 (10.2.3.169)
6.258011 ms
4 *
15015.315056 ms
5 *
15015.240908 ms
它继续超时,直到达到我的最大跃点计数。有人有什么建议吗?你知道吗
谢谢!你知道吗
做了些调查。问题最终是我使用的端口号。写入跟踪路由时,请使用端口33434。你知道吗
相关问题 更多 >
编程相关推荐