【问题标题】:scapy::traceroute setting source ip addressscapy::traceroute 设置源ip地址
【发布时间】:2017-03-01 05:38:41
【问题描述】:

我有一个设置,其中我的源服务器使用任播地址连接到网络,因此我每次 ping 或跟踪路由我连接到的网络中的任何目标时都需要使用源 ip。

我目前正在尝试使用 scapy 并使用 sr 方法,但 scapy 中的 traceroute 有一些我需要使用的强大功能。 scapy 中的 traceroute 不像 sr 方法那样采用任何源地址。

有没有办法解决这个问题?或者在 scapy::traceroute 之上是否有任何包装器允许我这样做?

【问题讨论】:

    标签: python scapy traceroute


    【解决方案1】:

    检查Scapy's traceroute function's code 发现它非常简单,而它的大多数强大功能都在于它使用从简单的sr 调用收到的结果实例化的TracerouteResult 类,如当前实现所示:

    @conf.commands.register
    def traceroute(target, dport=80, minttl=1, maxttl=30, sport=RandShort(), l4 = None, filter=None, timeout=2, verbose=None, **kargs):
        """Instant TCP traceroute
    traceroute(target, [maxttl=30,] [dport=80,] [sport=80,] [verbose=conf.verb]) -> None
    """
        if verbose is None:
            verbose = conf.verb
        if filter is None:
            # we only consider ICMP error packets and TCP packets with at
            # least the ACK flag set *and* either the SYN or the RST flag
            # set
            filter="(icmp and (icmp[0]=3 or icmp[0]=4 or icmp[0]=5 or icmp[0]=11 or icmp[0]=12)) or (tcp and (tcp[13] & 0x16 > 0x10))"
        if l4 is None:
            a,b = sr(IP(dst=target, id=RandShort(), ttl=(minttl,maxttl))/TCP(seq=RandInt(),sport=sport, dport=dport),
                     timeout=timeout, filter=filter, verbose=verbose, **kargs)
        else:
            # this should always work
            filter="ip"
            a,b = sr(IP(dst=target, id=RandShort(), ttl=(minttl,maxttl))/l4,
                     timeout=timeout, filter=filter, verbose=verbose, **kargs)
    
        a = TracerouteResult(a.res)
        if verbose:
            a.show()
        return a,b
    

    因此,您可以以与此处执行的类似方式调用sr,但也使用源地址,并将结果传递给TracerouteResult 类以利用其强大的功能。

    注意:等效方法可应用于Scapy's traceroute6 function's code for IPv6

    【讨论】:

    • @Yeol 谢谢,我不知道为什么我没有想到我可以只查找代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多