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实现带百分比的进度条
Jun 28 Python
用Python设计一个经典小游戏
May 15 Python
Python正则表达式经典入门教程
May 22 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
pandas.cut具体使用总结
Jun 24 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
深入理解Python变量的数据类型和存储
Feb 01 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
javascript中length属性的探索
2011/07/31 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
python得到windows自启动列表的方法
2018/10/14 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Python中函数参数匹配模型详解
2019/06/09 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
关于python 跨域处理方式详解
2020/03/28 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
什么是接口(Interface)?
2013/02/01 面试题
EJB3.1都有哪些改进
2012/11/17 面试题
文化建设工作方案
2014/05/12 职场文书
网站推广策划方案
2014/06/04 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android