学习python自动化运维的第八天

学习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")

最后生成的图像如下(路由是随时变化的,下图仅供参考):
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值