Python之——生成动态路由轨迹图的实例
作者:冰 河 发布时间:2023-01-11 17:50:37
一、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实现探测目标服务路由轨迹
在此次实践中,通过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。
生成的路由轨迹图如下图(仅局部),“-”将使用unk*单元代替,重点路由节点将通过ASN获取所处的运营商或IDC位置,如IP“202.102.69.210”为“CHINANET-JS-AS-AP AS Number for CHINANET jiangsu province backbone,CN”意思为该IP所处中国电信江苏省骨干网。
通过路由轨迹图,我们可以非常清晰地看到探测点到目标节点的路由走向,运营商时常会做路由节点分流,不排除会造成选择的路由线路不是最优的,该视图可以帮助我们了解到这个信息。另外IE8以上及chrome浏览器都已支持SVG格式文件,可以直接浏览,无需转换成png或其他格式,可以轻松整合到我们的运营平台当中。
本文出自《Python自动化运维 技术与最佳实践》
来源:https://blog.csdn.net/l1028386804/article/details/78989840


猜你喜欢
- 本文实例讲述了JS实现淘宝支付宝网站的控制台菜单效果。分享给大家供大家参考。具体如下:这是一款支付宝网站中的控制台总菜单,可实现动画效果的显
- 本文实例讲述了Python实现获取磁盘剩余空间的2种方法。分享给大家供大家参考,具体如下:方法1:import ctypesimport o
- 在python中,我们定义好一个字符串,如下所示。在python中定义个字符串然后把它赋值给一个变量。我们可以通过下标访问单个的字符,跟所有
- 本文用 Python 实现 PS 滤镜中的 USM 锐化效果import matplotlib.pyplot as pltfrom skim
- 在windows+iis服务器上运行asp程序可能会出现数据库无法更新的情况,具体错误信息可能为: 1、Microsoft JET Data
- 一、创建虚拟环境(1)打开cmd命令窗口(2)创建虚拟环境 conda create -n mydjango_env(3)查看虚拟环境 co
- 本文实例为大家分享了python实现简单俄罗斯方块游戏的具体代码,供大家参考,具体内容如下import pygame,sys,random,
- 1. 需要用到的Python库pygametkinter2. 简易UI设计audio_player = Tk()audio_player.t
- 本文深入分析了Python面向对象程序设计OOP。分享给大家供大家参考,具体如下:下面是一个关于OOP的实例,模块文件为person.py#
- 一、软件下载官方下载地址:https://download.jetbrains.8686c.com/webstorm/WebStorm-20
- 使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows 版本上面直
- order by 是怎么工作的?表定义CREATE TABLE `t1` ( `id` int(11) NOT NULL, &n
- C#连接数据库:Connection对象1.Connection对象概述Connection对象是一个连接对象,主要功能是建立与物理数据库的
- 主要介绍常用的MySQL命令,包括连接数据库,修改密码,管理用户,操作数据库,操作数据表,数据库备份等,每个命令都配有实例说明,让大家更容易
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- ref:被用来给元素或子组件注册引用信息,引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,那么指向的就是普通的DO
- 本文实例为大家分享了Django1.11自带分页器Django的具体使用方法,供大家参考,具体内容如下接下来我编写一个 views ,名cl
- Python之绘图和可视化1. 启用matplotlib最常用的Pylab模式的IPython(IPython --pylab)2. mat
- 这里所说的“小偷”指的是在ASP中运用XML中的xmlhttp组件提供的强大功能,把远程网站上的数据(图片,网页及其他文件)抓取采集到本地,
- 目录1. 前言2. Echarts3. Pyecharts3-1 安装依赖3-2 拷贝