用Python和Scapy实现traceroute路由追踪

用Python和Scapy实现traceroute路由追踪

  • 用Python和Scapy实现traceroute路由追踪
    • 笔者的配置环境
    • 需要的支持
    • 第一步:安装scapy
    • 第二步:安装Graphviz和ImageMagick
    • 第三步:添加环境变量
    • 第四步:测试
    • 生成svg的图片
    • 遇到的问题以及解决方法

笔者的配置环境

  • windows10
  • python3.6.1
  • pycharm2018
  • scapy2.4.2

需要的支持

Graphviz和ImageMagick的应用程序,而非python的模块

第一步:安装scapy

直接pip install scapy即可

第二步:安装Graphviz和ImageMagick

  • Graphviz的windows msi安装包如下,linux自己去Graphviz官网解决
    https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi

  • ImageMagick的windows msi安装包如下,linux自己去ImageMagick官网解决
    https://imagemagick.org/download/binaries/
    笔者的ImageMagick版本为:ImageMagick-7.0.8-34-Q16-x64-dll.exe

注:链接进不去的话搭配请搭配科学上网

第三步:添加环境变量

分别给Graphviz和ImageMagick添加环境变量

这点很重要!!!!没有添加的话将无法使用traceroute中的graph函数绘制追踪图。

  • 笔者添加的Graphviz的环境变量路径如下 C:\Program Files (x86)\Graphviz2.38\bin

  • 笔者添加的ImageMagick的环境变量路径 C:\Program Files\ImageMagick-7.0.8-Q16

第四步:测试

直接上代码:

import os,sys,time,subprocess
from scapy.as_resolvers import AS_resolver_radb  
from scapy.all import traceroute
domains='www.baidu.com'
target = domains.split(' ')
dport = [80]
if len(target) >= 1 and target[0] != '':
	# 启动路由跟踪
	res, unans = traceroute(domains, dport=dport, retry=-2)
	# traceroute生成的信息绘制成svg
	res.graph(target="> graph.svg", ASres=AS_resolver_radb(), type="svg") # ASres=AS_resolver_radb()改变为可用的whois提供商,而非原来的ASres=None后默认的被qiang了的提供商
	time.sleep(1)
	# svg 转格式为 png
	#subprocess.Popen("/usr/local/bin/convert test.svg test.png", shell=True)
else:
    print("IP/domain number of errors, exit")

结果如下:

Begin emission:
********Finished sending 30 packets.
**************Begin emission:
Finished sending 8 packets.
Begin emission:
Finished sending 8 packets.

Received 22 packets, got 22 answers, remaining 7 packets
   183.232.231.174:tcp80 
1  10.21.123.254   11    
2  172.16.9.254    11    
3  10.32.254.2     11    
4  10.32.254.10    11    
5  10.36.254.18    11    
6  10.0.1.6        11    
7  111.59.124.129  11    
9  111.12.4.124    11    
17 183.232.231.174 SA    
18 183.232.231.174 SA    
19 183.232.231.174 SA    
20 183.232.231.174 SA    
21 183.232.231.174 SA    
22 183.232.231.174 SA    
23 183.232.231.174 SA    
24 183.232.231.174 SA    
25 183.232.231.174 SA    
26 183.232.231.174 SA    
27 183.232.231.174 SA    
28 183.232.231.174 SA    
29 183.232.231.174 SA    
30 183.232.231.174 SA  

生成svg的图片

用Python和Scapy实现traceroute路由追踪_第1张图片

遇到的问题以及解决方法

报错类型为

RuntimeError: Could not contact whois providers

想了解详细原因的请移步 https://www.oschina.net/question/2917603_2278439 围观最下面的okidingme的回答。

解决办法,请看笔者给出的代码:

from scapy.as_resolvers import AS_resolver_radb  
res.graph(target="> graph.svg", ASres=AS_resolver_radb(), type="svg")

ASres=AS_resolver_radb()改变为可用的whois提供商,而非原来的ASres=None后默认的被qiang了的提供商

你可能感兴趣的:(Python3开发)