学习python自动化运维的第三天
今天学习的内容为通过python进行路由追踪,并生成图片,以及分享过程中遇到的一些问题。
首先,粘贴书中的源代码(已经转换为python3的了),但是这个代码是不能运行成功的。需要做一些修改,修改的在最后。
# -*- coding: utf-8 -*-
import time,subprocess
import warnings,logging
from scapy.all import traceroute
warnings.filterwarnings("ignore", category=DeprecationWarning) #屏蔽scapy 无用告警信息
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) #屏蔽模块IPv6 多余告警
target = ['baidu.com'] # 跟踪的域名(IP)
dport = [80] #扫描的端口列表
res,unans = traceroute(target,dport=dport,retry=-2) #启动路由跟踪
res.graph(target="img/test.svg", ASres=None , type="svg") #生成svg矢量图形
time.sleep(1)
# #svg转png格式
subprocess.Popen("./img/test.svg ./img/test.png", shell=True)
遇到的问题有一下几个。
第一个问题,报错:
OSError: GraphViz call failed (is it installed?)
解决办法:
安装graphviz
有网友只安装了第一步的python三方库就解决了相关的问题,但是问题不同,只是报错相似,我是在安装了第一步之后,问题依然没有解决,才安装的第二步,之后问题解决。该问题
第一步:安装响应的python第三方库
pip install pydot-ng
pip install graphviz
pip install pydot
第二步:安装graphviz软件
下载gtaphviz,下载地址为:链接:https://pan.baidu.com/s/127EYb5Ws75GWQkzTn8ngBA
提取码:nhsa
下载后即可安装
安装过程中一直next即可(安装路径课修改)
将graphviz的bin文件夹添加到环境变量(添加到环境变量后记得重启电脑,环境变量即可生效,不懂得如何添加的可百度,网上一大把)
之后运行代码即可成功生成正确的svg文件
第二个问题,报错:
‘.’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
解决办法:
这个问题是因为使用的原来的代码subprocess库导致的,我是这样猜测的,因为我的svg文件已经可以正常打开了,那么问题肯定是svg转换为png的过程出现错误,我在网上搜了svg转png的方法,直接安装python第三方看解决
pip install cairosvg
之后修改代码,用这个库将svg文件转换为png格式
修改之后的代码如下
# -*- coding: utf-8 -*-
import time,cairosvg
import warnings,logging
from scapy.all import traceroute
warnings.filterwarnings("ignore", category=DeprecationWarning) #屏蔽scapy 无用告警信息
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) #屏蔽模块IPv6 多余告警
target = ['baidu.com'] # 跟踪的域名(IP)
dport = [80] #扫描的端口列表
res,unans = traceroute(target,dport=dport,retry=-2) #启动路由跟踪
res.graph(target="img/test.svg", ASres=None , type="svg") #生成svg矢量图形
time.sleep(1)
cairosvg.svg2png(url="img/test.svg", write_to="img/test.png")
运行这部分代码,遇到第三个问题
第三个问题,报错
OSError: no library called "cairo-2" was found
no library called "cairo" was found
解决办法:
此处的解决办法来自:这位大佬 安装gtk2-runtime-2.24.33-2021-01-30-ts-win64.exe这个软件
下载地址为:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer
找到下图中的这个软件下载安装
默认会自动添加到环境变量,之后重启vscode就可以(我的编辑器是vscode)
之后运行代码,即可正常进行路由跟踪,并将保存的svg文件转换为png文件。
最终代码如下:
# -*- coding: utf-8 -*-
"""自动化运维的第八天"""
"""
今天学习的主要内容为实现TCP探测目标服务路由轨迹
使用到的库主要有scapy库和cairosvg库两个库,前者
实现路由追踪并生成svg网页文件,然后通过sairosvg库
将svg文件转换为png文件
"""
# 实现TCP探测目标服务路由轨迹
import time,cairosvg
import warnings,logging
from scapy.all import traceroute
warnings.filterwarnings("ignore", category=DeprecationWarning) #屏蔽scapy 无用告警信息
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) #屏蔽模块IPv6 多余告警
target = ['baidu.com'] # 目标服务器的域名(IP)
dport = [80] #扫描的端口列表
res,unans = traceroute(target,dport=dport,retry=-2) #启动路由跟踪
res.graph(target="img/test.svg", ASres=None , type="svg") #生成svg矢量图形
time.sleep(1)
cairosvg.svg2png(url="img/test.svg", write_to="img/test.png")
最后生成的图像如下(路由是随时变化的,下图仅供参考):