# 网络拓扑管理
## 一、实验内容
利用 ping 和 traceroute 命令绘制网络拓扑结构图,找出网关,区分校园网内部 IP 和外部 IP。实验中发现了基于 UDP 的 traceroute 命令在实际使用时的缺陷,并基于 ICMP 实现了新的 traceroute 程序用于追踪并保存路由路径。基于 python 的 networkx 和 matplotlib 库,将这些路由路径最终绘制成了网络拓扑结构图。
## 二、实验过程
### 1.traceroute 命令的原理
traceroute 命令利用 IP 生存时间(TTL)字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
首先,traceroute 送出一个 TTL 是 1 的 IP 数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将 TTL 减 1。此时,TTL 变为 0,该路由器会将此数据包丢掉,并送回一个[ICMPtimeexceeded]消息(包括发 IP 包的源地址,IP 包的所有内容及路由器的 IP 地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上。
然后,traceroute 每次将送出的数据包的 TTL 加 1 来发现另一个路由器,这个重复的动作一直持续到某个数据包抵达目的地。当数据包到达目的地后,该主机则不会送回 ICMPtimeexceeded 消息,一旦到达目的地,由于 traceroute 通过 UDP 数据包向不可达端口(大于 30000)发送数据包,因此会收到[ICMPportunreachable]消息,故可判断到达目的地。
### 2.traceroute 命令实际使用结果
实际运行时用 traceroute 命令获取从当前校园网节点到 [www.baidu.com](http://www.baidu.com/) 的路由路径,且已知可以 ping 通 [www.baidu.com](http://www.baidu.com/),如下图所示:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/9ff7b09a9c5f124e57a57e52c014ac6e.writebug)
“traceroute[www.baidu.com](http://www.baidu.com/)”的结果如下:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/026f4bc0a4e17400a63d303919e7a365.writebug)
图中表示 timedout,主机无法得到应该返回的 ICMP 错误信息包。下面结合 Wireshark 来进行抓包分析:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/1f46da2cc1f269393aa12a37d1825d03.writebug)
可以看出,traceroute 命令默认每一跳发送 3 个 UDP 数据包。在某一个路由器中 TTL 超时后,返回一个错误类型为 Time-to-liveexceeded 的 ICMP 数据包。
![](https://www.writebug.com/myres/static/uploads/2021/11/9/6c1100f0510970ee27aee95147b7611b.writebug)
从图中红圈可知主机发出的第一个 UDP 包的 TTL 为 1,即 traceroute 程序首先通过 UDP 协议向目标地址 220.181.38.149 发送了一个 TTL 为 1 的数据包,然后在第一个路由器中 TTL 超时,返回一个错误类型为 Time-to-liveexceeded 的 ICMP 数据包,此时通过该数据包的源地址可知第一站路由器的地址为 10.203.64.1。之后只需要不停增加 TTL 的值就能得到每一跳的地址。
### 3.traceroute 命令缺陷分析
然而实验中发现,大部分情况下 traceroute 并不能到达目的地,当 TTL 增加到一定大小之后就一直拿不到返回的数据包了:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/5c5c1e6ee3c32287223d01e39ead10e7.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/9/2aefd4d5afd41e36d94228d3b69ed002.writebug)
实际上并不是所有网关都会如实返回 ICMP 超时报文。处于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP 报文。因此,基于 UDP 实现的 Traceroute 程序不一定能拿到所有的沿途网关地址。
## 4.改进思路:基于 ICMP 实现的 traceroute
上述方案失败的原因是由于服务器对于 UDP 数据包的处理,所以在改进方案中不使用 UDP 协议,而是直接发送一个 ICMP 回显请求(echorequest)数据包,服务器在收到回显请求的时候会向客户端发送一个 ICMP 回显应答(echoreply)数据包,在这之后的流程还是跟基于 UDP 实现的方案一样。这样就避免了 traceroute 数据包被服务器的防火墙策略墙掉。
完整程序则利用 traceroute 多个网站后获得的路由节点和路径来作为拓扑结构图的节点和边,利用 python 的 networkx 库来进行绘图,将 seu-wlan 的内部节点与外部网站的节点分成两类,最后根据拓扑图确定位于交界处的网关 IP。
## 三、ICMP 数据包说明
### 1.ICMP 数据包头部
ICMP 报头从 IP 报头的第 160 位开始(IP 首部 20 字节),头部的格式如下:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/02d5bdc2ea575a335810a7a4ac131948.writebug)
其中的类型字段用来表示消息的类型。报文中的标识符和序列号由发送端指定,如果这个 ICMP 报文是一个请求回显的报文(类型为 8,代码为 0),这两个字段会被原封不动的返回。
根据上图的格式可以定义如下头部结构:
header=struct.pack("bbHHh",ICMP_ECHO_REQUEST,0,myChecksum,myID,1)
### 2.返回的 ICMP 数据包
traceroute 中返回的 ICMP 数据包头部的类型共有 3 种:
1)Type==11:ICMP 超时,即 TTL 超时
2)Type==3:目的不可达
3)Type==0:EchoReply,即到达终点
## 四、设计思路和流程
### 1.traceroute 方案的设计思路
如下图所示:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/dce1ec4a8f192c007b88205646b31231.writebug)
1.客户端发送一个 TTL 为 1 的 ICMP 请求回显数据包,在第一跳的时候超时并返回一个 ICMP 超时数据包,得到第一跳的地址。
2.客户端发送一个 TTL 为 2 的 ICMP 请求回显数据包,得到第二跳的地址。
……
N.客户端发送一个 TTL 为 N 的 ICMP 请求回显数据包,到达目标主机,目标主机返回一个 ICMP 回显应答,traceroute 结束。
### 2.拓扑结构图中的节点设计
实验中需要将校园网内部节点与外部节点分别标记出,而校园网内部节点 IP 开头为”10.”,因此可以根据 IP 格式将两种节点分类。如下所示:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/8d73fd3d040366a2c27640eebc8a3e3e.writebug)
### 3.GUI 设计
“网络拓扑管理工具”的界面需要:
1)1 个输入文本框,用于输入地址以跟踪路径;
2)1 个输出文本框,用于实时显示 traceroute 过程中的结果;
3)3 个按钮,分别执行 traceroute、保存路由路径、绘制网络拓扑图的功能。
整体框架如下图:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/353f5d4fc8f105c15b6f21fe75813db1.writebug)
### 4.完整程序的流程图
完整程序的流程图如下:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/03ddfbeb2bc0b3a1ac3c82d7bcb162e6.writebug)
## 五、程序运行结果
### 1.traceroute 结果
![](https://www.writebug.com/myres/static/uploads/2021/11/9/9f7d7ddcaed1459c5c83f03aaea968fa.writebug)
由图可知,相比基于 UDP 实现的 traceroute 命令,基于 ICMP 实现的 traceroute 避免了数据包被服务器的防火墙策略墙掉的问题,同时 rtt 也很小。
### 2.拓扑结构的节点与边
在对多个网站进行 traceroute 后我们得到了以下节点和路径:
![](https://www.writebug.com/myres/static/uploads/2021/11/9/05466e75c4731d9fe4645d788508d539.writebug)
由图可知,程序根据 IP 格式将 IP 分为‘0’、‘1’两类,分别代表内部节点和外部节点。
### 3.网络拓扑图
![](https://www.writebug.com/myres/static/uploads/2021/11/9/b19e14ab7718e309ed6bc1535065f818.writebug)
图中红色节点为校园网内部节点,绿色节点为外网节点。从图中可以直观的看到从 seu-wlan 到外部网站的 IP 节点,查看 label 可知该节�
没有合适的资源?快使用搜索试试~ 我知道了~
基于networkx和matplotlib绘制的网络拓扑结构图【100013144】
共7个文件
py:2个
csv:2个
pdf:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 35 浏览量
2023-07-31
11:28:33
上传
评论
收藏 1.58MB ZIP 举报
温馨提示
利用 ping 和 traceroute 命令绘制网络拓扑结构图,找出网关,区分校园网内部 IP 和外部 IP。实验中发现了基于 UDP 的 traceroute 命令在实际使用时的缺陷,并基于 ICMP 实现了新的 traceroute 程序用于追踪并保存路由路径。基于 python 的 networkx 和 matplotlib 库,将这些路由路径最终绘制成了网络拓扑结构图。
资源推荐
资源详情
资源评论
收起资源包目录
100013144-基于networkx和matplotlib绘制的网络拓扑结构图.zip (7个子文件)
neitwork
LICENSE 1KB
SourceCode
Traceroute_ICMP.py 4KB
UI.py 8KB
node.csv 936B
edge.csv 3KB
09016429陈诚_大作业报告.pdf 1.98MB
README.md 20KB
共 7 条
- 1
资源评论
- 落花逐明月2024-04-27支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- csdnlucky662023-11-05资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。
- 2301_765180782024-03-05超级好的资源,很值得参考学习,对我启发很大,支持!
神仙别闹
- 粉丝: 2671
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功