当前位置:主页 > 商业资讯 >

今日热讯:Python实现Tracert追踪TTL值

发布时间: 2023-01-04 06:26:37

Tracert命令跟踪路由原理是IP路由每经过一个路由节点TTL值会减一,假设TTL值=0时数据包还没有到达目标主机,那么该路由则会回复给目标主机一个数据包不可达,由此我们就可以获取到目标主机的IP地址,如下我们通过scapy构造一个路由追踪工具并实现一次追踪。


【资料图】

需要安装扩展包:

pipinstallscapy

首先Scapy是如何发包与收包的,看以下案例的演示。

>>>fromrandomimportrandint

>>>

>>>RandomID=randint(1,65534)

>>>packet=IP(dst="8.141.58.64",ttl=1,id=RandomID)/ICMP(id=RandomID,seq=RandomID)/"hellolyshark"

>>>respon=sr1(packet,timeout=3,verbose=0)

>>>

路由追踪原理(参考于互联网):一开始发送一个TTL为1的包,这样到达第一个路由器的时候就已经超时了,第一个路由器就发ICMP通知说包超时,这样就能够记录下所经过的第一个路由器的IP。然后将TTL加1,安全通过第一个路由器,而第二个路由器的的处理与第一个同样,丢包,发通知说包超时了,这样记录下第二个路由器IP,由此能够一直进行下去,直到这个数据包到达目标主机,由此打印出全部经过的路由器。

将这个过程自动化,就可以完成数据包的跟踪,Python代码如下所示

fromscapy.allimport*

fromrandomimportrandint

importtime,ipaddress,threading

fromoptparseimportOptionParser

defICMP_Ping(addr):

RandomID=randint(1,65534)

packet=IP(dst=addr,ttl=64,id=RandomID)/ICMP(id=RandomID,seq=RandomID)/"lyshark"

respon=sr1(packet,timeout=3,verbose=0)

ifrespon:

print("[+]-->{}".format(str(respon[IP].src)))

#By:LyShark.com

defTraceRouteTTL(addr):

foriteminrange(1,128):

RandomID=randint(1,65534)

packet=IP(dst=addr,ttl=item,id=RandomID)/ICMP(id=RandomID,seq=RandomID)

respon=sr1(packet,timeout=3,verbose=0)

ifrespon!=None:

ip_src=str(respon[IP].src)

ifip_src!=addr:

print("[+]-->{}".format(str(respon[IP].src)))

else:

print("[+]-->{}".format(str(respon[IP].src)))

return1

else:

print("[-]-->TimeOut")

time.sleep(1)

defBanner:

print("_______")

print("|___/\n")

if__name__=="__main__":

Banner

parser=OptionParser

parser.add_option("--mode",dest="mode",help="选择使用的工具模式

")

parser.add_option("-a","--addr",dest="addr",help="指定一个IP地址或范围")

(options,args)=parser.parse_args

print("By:LyShark.com")

#使用方式:lyshark.py--mode=ping-a192.168.1.0/24

ifoptions.mode=="ping":

net=ipaddress.ip_network(str(options.addr))

foriteminnet:

t=threading.Thread(target=ICMP_Ping,args=(str(item),))

t.start

#使用方式:lyshark.py--mode=trace-a8.141.58.64

elifoptions.mode=="trace":

TraceRouteTTL(str(options.addr))

else:

parser.print_help

追踪探测效果如下:

标签: Tracert

为您推荐

  • 最新资讯
  • 热门资讯
财经