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中的filter和lambda函数的使用
Apr 07 Python
python list格式数据excel导出方法
Oct 31 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
Python实现不规则图形填充的思路
Feb 02 Python
python安装和pycharm环境搭建设置方法
May 27 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
使用Python封装excel操作指南
Jan 29 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 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
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
js导入导出excel(实例代码)
2013/11/25 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
代码详解javascript模块加载器
2018/03/04 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
Python中unittest用法实例
2014/09/25 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
你所知道的集合类都有哪些?主要方法?
2012/12/31 面试题
外企办公室竞聘演讲稿
2013/12/29 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
2015年财政所工作总结
2015/04/25 职场文书
应收账款管理制度
2015/08/06 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB