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,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
421 0
|
6月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
177 0
|
6月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
414 2
|
5月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
841 0
|
5月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
242 0
|
6月前
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
177 2
|
6月前
|
机器学习/深度学习 缓存 算法
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
582 1
|
5月前
|
传感器 机器学习/深度学习 数据采集
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
【航空发动机寿命预测】基于SE-ResNet网络的发动机寿命预测,C-MAPSS航空发动机寿命预测研究(Matlab代码实现)
391 0
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
379 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
295 10

推荐镜像

更多