2015-11-05 55 views
1

我有一個設置,其中我的源服務器使用任播地址連接到網絡,結果我需要每次使用源ip ping或traceroute網絡中的任何目標我連接到。scapy :: traceroute設置源IP地址

我目前正在試驗scapy和使用sr方法,但scapy中的traceroute有一些我需要使用的強大功能。 scapy中的traceroute不像sr方法那樣使用任何源地址。

有沒有辦法解決這個問題?或者scapy :: traceroute上是否有任何包裝可以讓我做到這一點?

回答

0

檢查Scapy's traceroute function's code表明,這是非常簡單的,而它的大部分強大的功能在於與TracerouteResult類是從一個簡單的sr調用接收的結果實例,因爲可以通過當前執行中可以看出:

@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

+0

@Yeol謝謝,我不知道爲什麼它沒有發生,我可以查找代碼。 – indichimp