50行Python代码输出各种网络协议报文结构的纯文本表格图

简介:

经常与TCP/IP协议族打交道,免不了要画各种协议报文的纯文本结构图。为何需要纯文本结构图?想想在工程的源代码中,您能贴张jpeg或png的图片上去?

     示范代码以输出 IP 包头为例, 使用python 2.7 编写(Python 3 应该也能运行)。本程序还可以用来画类似结构的表格图,再次抛砖引玉,欢迎大家使用交流。


代码

[python] view plaincopy

  1. #!/usr/bin/env python  

  2. # -*- coding: utf-8 -*-  

  3. ''''' 

  4. Copyright (c) 2014, Thomas Hu. All rights reserved. 

  5.  

  6. Created on 2014-8-3 

  7.  

  8. @author: Thomas Hu 

  9. @email : thomashtq#163.com 

  10.  

  11. '''  

  12. import math  

  13. from string import ljust, rjust, center  

  14.   

  15. def format_protocol(head_list, just_type):  

  16.     just_dict = {"ljust": ljust,  

  17.                  "rjust": rjust,  

  18.                  "center": center,  

  19.                  }  

  20.     just_func = just_dict.get(just_type.lower(), center)  

  21.     vchar = "|"  

  22.     head = vchar  

  23.     width = 2  

  24.     max_key = 0  

  25.     # Get the maximum width  

  26.     for item in head_list:  

  27.         tmp = math.ceil(float(len(item[0])) / item[1])  

  28.         if tmp > width:  

  29.             width = int(tmp)  

  30.         if len(item[0]) > max_key:  

  31.             max_key = len(item[0])  

  32.     for i in range(32):  

  33.         head += " "*(width - len(str(i))) + str(i)  + vchar  

  34.     hline = vchar + "-" *(len(head) - 2) + vchar  

  35.     print(head)  

  36.     print(hline)  

  37.     index = 0  

  38.     line = vchar  

  39.     # Print protocol head  

  40.     for item in head_list:  

  41.         line += item[0].center(item[1] * (width + 1) - 1" ") + vchar  

  42.         index += item[1]  

  43.         if index % 32 == 0:  

  44.             print(line)  

  45.             print(hline)  

  46.             line = vchar  

  47.     # Print protocol description  

  48.     print("\r\nThe protocol head items description are as follows:")  

  49.     for item in head_list:  

  50.         print("%s : %s"%(just_func(item[0], max_key, " "), item[2]))  

  51.               

  52. if __name__ == '__main__':  

  53.     head_list = [("Ver"4"Protocol version"),   

  54.                  ("Head"4"Head length(in bytes)"),   

  55.                  ("TOS"8"Type of service"),   

  56.                  ("Total Length"16"The total length of IP packet(in bytes)"),  

  57.                  ("ID"16"The identification of packet"),   

  58.                  ("Flag"3"The flag"),   

  59.                  ("Offset"13"The offset"),  

  60.                  ("TTL"8"Time to live"),  

  61.                  ("Proto"8"The protocol id"),  

  62.                  ("Checksum"16"The head check sum"),  

  63.                  ("Source Address"32"The source IP address"),  

  64.                  ("Destination Address"32"The destination IP address"),  

  65.                  ("Opitons(if has)"32"The options block, if has that"),  

  66.                  ("Data"32"The data block of IP packet"),  

  67.                  ]  

  68.     format_protocol(head_list, "ljust")  



输出结果

 











本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1576045,如需转载请自行联系原作者
目录
相关文章
|
22天前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
4月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
96 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
18天前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
2月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
190 18
|
4月前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
411 51
|
8月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
211 5
|
3月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
216 0
|
9月前
|
机器学习/深度学习 编解码 TensorFlow
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
459 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
|
4月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
117 4

推荐镜像

更多