Python之——生成动态路由轨迹图的实例


Posted in Python onNovember 22, 2019

一、scapy简介与安装

scapy(http://www.secdev.org/projects/scapy/)是一个强大的交互式数据包处理程序,它能够对数据包进行伪造或解包,包括发送数据包、包嗅探、应答和反馈匹配等功能。可以用在处理网络扫描、路由跟踪、服务探测、单元测试等方面,本节主要针对scapy的路由跟踪功能,实现TCP协议方式对服务可用性的探测,比如常用的80(HTTP)与443(HTTPS)服务,并生成美观的路由线路图报表,让管理员清晰了解探测点到目标主机的服务状态、骨干路由节点所处的IDC位置、经过的运营商路由节点等信息。

下面详细进行介绍。

scapy模块的安装方法如下:

# scapy模板需要tcpdump程序支持,生成报表需要graphviz、ImageMagick图像处理包支持
# yum -y install tcpdump graphviz ImageMagick
# 源码安装
# wget http://www.secdev.org/projects/scapy/files/scapy-2.2.0.tar.gz
# tar -zxvf scapy-2.2.0.tar.gz
# cd scapy-2.2.0
# python setup.py install

二、scapy模块常用方法说明

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

traceroute(target, dport=80, minttl=1, maxttl=30, sport=<RandShort>, 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:指定路由跟踪的最大跳数(节点数)。

三、基于TCP实现探测目标服务路由轨迹

Python之——生成动态路由轨迹图的实例

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

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

# -*- coding: utf-8 -*-
import os,sys,time,subprocess
import warnings,logging
warnings.filterwarnings("ignore", category=DeprecationWarning) #屏蔽scapy无用告警信息
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) #屏蔽模块IPv6多余告警
from scapy.all import traceroute
 
domains = raw_input('Please input one or more IP/domain: ') #接受输入的域名或IP
target = domains.split(' ')
dport = [80]  #扫描的端口列表
 
if len(target) >= 1 and target[0]!='':
  res,unans = traceroute(target,dport=dport,retry=-2) #启动路由跟踪
  res.graph(target="> test.svg")  #生成svg矢量图形
  time.sleep(1)
  subprocess.Popen("/usr/bin/convert test.svg test.png", shell=True) #svg转png格式
else:
  print "IP/domain number of errors,exit"

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

Python之——生成动态路由轨迹图的实例

生成的路由轨迹图如下图(仅局部),“-”将使用unk*单元代替,重点路由节点将通过ASN获取所处的运营商或IDC位置,如IP“202.102.69.210”为“CHINANET-JS-AS-AP AS Number for CHINANET jiangsu province backbone,CN”意思为该IP所处中国电信江苏省骨干网。

Python之——生成动态路由轨迹图的实例

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

本文出自《Python自动化运维 技术与最佳实践》

以上这篇Python之——生成动态路由轨迹图的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
零基础学Python(一)Python环境安装
Aug 20 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
Jul 04 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
python实现二维插值的三维显示
Dec 17 Python
python在回调函数中获取返回值的方法
Feb 22 Python
django 控制页面跳转的例子
Aug 06 Python
python实现的自动发送消息功能详解
Aug 15 Python
python多线程分块读取文件
Aug 29 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
python:动态路由的Flask程序代码
Nov 22 #Python
python判断无向图环是否存在的示例
Nov 22 #Python
python计算无向图节点度的实例代码
Nov 22 #Python
Python字符串格式化输出代码实例
Nov 22 #Python
python常用数据重复项处理方法
Nov 22 #Python
Python pickle模块实现对象序列化
Nov 22 #Python
python绘制无向图度分布曲线示例
Nov 22 #Python
You might like
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
python使用epoll实现服务端的方法
2018/10/16 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
英国袜子店:Sock Shop
2017/01/11 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
期末考试动员演讲稿
2014/01/10 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
详细的大学生创业计划书模板
2014/01/27 职场文书
运动会入场词50字
2014/02/20 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python