天天看点

《Python自动化运维:技术与最佳实践》一3.3 生成动态路由轨迹图

本节书摘来自华章出版社《python自动化运维:技术与最佳实践》一书中的第3章,第3.3节,作者 (美)neil bergman ,更多章节内容可以访问云栖社区“华章计算机”公众号查看

scapy模块的安装方法如下:

scapy模块提供了众多网络数据包操作的方法,包括发包send()、syn ack扫描、嗅探sniff()、抓包wrpcap()、tcp路由跟踪traceroute()等,本节主要关注服务监控内容接下来详细介绍traceroute()方法,其具体定义如下:

traceroute(target, dport=80, minttl=1, maxttl=30, sport=, l4=none, filter=none, timeout=2, verbose=none, **kargs)

该方法实现tcp跟踪路由功能,关键参数说明如下:

target:跟踪的目标对象,可以是域名或ip,类型为列表,支持同时指定多个目标,如["www.qq.com","www.baidu.com","www.google.com.hk"];

dport:目标端口,类型为列表,支持同时指定多个端口,如[80,443];

minttl:指定路由跟踪的最小跳数(节点数);

maxttl:指定路由跟踪的最大跳数(节点数)。

在此次实践中,通过scapy的traceroute()方法实现探测机到目标服务器的路由轨迹,整个过程的原理见图3-14,首先通过探测机以syn方式进行tcp服务扫描,同时启动tcpdump进行抓包,捕获扫描过程经过的所有路由点,再通过graph()方法进行路由ip轨迹绘制,中间调用asn映射查询ip地理信息并生成svg流程文档,最后使用imagemagick工具将svg格式转换成png,流程结束。

《Python自动化运维:技术与最佳实践》一3.3 生成动态路由轨迹图

本次实践通过traceroute()方法实现路由的跟踪,跟踪结果动态生成图片格式。功能实现源码如下:

【/home/test/scapy/simple1.py】

代码运行结果见图3-15,“-”表示路由节点无回应或超时;“11”表示扫描的指定服务无回应;“sa”表示扫描的指定服务有回应,一般是最后一个主机ip。

图3-15 代码运行结果

生成的路由轨迹图见图3-16(仅局部),“-”将使用unk*单元代替,重点路由节点将通过asn获取所处的运营商或idc位置,如ip“202.102.69.210”为“chinanet-js-as-ap as number for chinanet jiangsu province backbone,cn”意思为该ip所处中国电信江苏省骨干网。

《Python自动化运维:技术与最佳实践》一3.3 生成动态路由轨迹图

通过路由轨迹图,我们可以非常清晰地看到探测点到目标节点的路由走向,运营商时常会做路由节点分流,不排除会造成选择的路由线路不是最优的,该视图可以帮助我们了解到这个信息。另外ie8以上及chrome浏览器都已支持svg格式文件,可以直接浏览,无需转换成png或其他格式,可以轻松整合到我们的运营平台当中。