首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的traceroute在运行过程中无法与服务器联系?

为什么我的traceroute在运行过程中无法与服务器联系?
EN

Stack Overflow用户
提问于 2015-12-04 08:20:59
回答 1查看 123关注 0票数 1

我一直在努力让我的traceroute启动并运行,我希望能得到一些帮助。我在Linux虚拟机上用Python2.7运行它。下面是我的源代码(请忽略第一行的空格;我很难理解SO的代码格式化工具,但是缩进在我的本地副本中是正确的。)

代码语言:javascript
复制
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')

我的输出如下所示:

代码语言:javascript
复制
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

它会继续超时,直到达到我的最大跳数。有没有人有建议?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-12-04 11:59:32

做了些调查。问题最终出在我使用的端口号上。写入traceroute时,请使用端口33434。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34078794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档