zoukankan      html  css  js  c++  java
  • 我离baidu.com有几跳

     一、背景 

      最近,读了网易游戏面试经验(三) - cotyb - 博客园之后,自己尝试着在windows下tracert了一下baidu.com,结果如下图一所示,发现从tracert的结果看,似乎一直到30跳之后都没有达到baidu.com(220.181.57.217)。然而如果ping baidu.com是可以ping通的,心想30跳也到不了baidu.com似乎有点远,于是有了下面的尝试。

    尝试一:指定ttl为29,ping,可以ping通

    尝试二:比较ping和tracert抓包结果

    ping包的内容

    tracert包的内容

    二、初步结论

    对比ping和tracert包之后发现,ping包的内容里有abcdef...等字符,而tracert的icmp包则是全0。猜测是baidu.com对icmp包的内容进行了识别。为了验证这一点,下面通过scapy,构造不同icmp包进行验证。

    三、验证

    1)scapy发送64个字节全零报文,wireshark抓包显示没有收到应答:

    a=64*"x00"

    send(IP(dst="220.181.57.217")/ICMP()/a)

    2)发送内容为“abcdefghjklmnopq”、“abcdefghjklmnopqr”的报文,都收到了应答。

    send(IP(dst="220.181.57.217")/ICMP()/“abcdefghjklmnopq”)

    四、一个可以输出距离baidu.com有几跳的小脚本

    一些复杂的场景比如,不同ping baidu.com得到不同地址没有考虑。修改这个小程序,读取ping的输出的话,能够得到和每一跳的IP地址。

    import os
    
    
    n=30
    i=1
    while i<n:
    
        a=os.popen('ping -n 2 -i '+str(i)+' baidu.com').read()
        if "TTL=" in a:
            print "success"
            break
        i=i+1
        #print a
    if i<n:
        print "distance is %d hops"%i
            

  • 相关阅读:
    Codeforces.468C.Hack it!(构造)
    BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)
    146
    145
    144
    143
    142
    141
    140
    139
  • 原文地址:https://www.cnblogs.com/jiangz/p/5380008.html
Copyright © 2011-2022 走看看