用于指定/解析/打包二进制协议的库

suitcase的Python项目详细描述


行李箱

Build StatusCoverage StatusCode ClimateLatest VersionLicense

手提箱是一个为 指定和解析协议。手提箱提供内部DSL (领域特定语言)用于描述协议帧。它试图 对于二进制协议,像Django’s ORMSqlalchemy’s Declarative Syntax 用于数据库orms并采用类似的、基于类的语法。

View the Full Documentation

手提箱的原始版本是由 DigiWireless Design Services。这个 软件是作为alpha软件提供的,没有经过正式的 测试,但也有大量的单元测试。

View the Changelog

示例

下面的例子展示了如何使用手提箱来描述 构成互联网骨干网的核心网络协议:

fromsuitcase.fieldsimportUBInt16,Payload,LengthField,Magic, \
    UBInt8Sequence,DispatchField,DispatchTarget,UBInt8,UBInt32,BitField,BitNum, \
    BitBoolfromsuitcase.structureimportStructureclassTCPFrameHeader(Structure):source_address=UBInt16()destination_address=UBInt16()sequence_number=UBInt32()acknowledgement_number=UBInt32()options=BitField(16,data_offset=BitNum(4),reserved=BitNum(3),NS=BitBool(),CWR=BitBool(),ECE=BitBool(),URG=BitBool(),ACK=BitBool(),PSH=BitBool(),RST=BitBool(),SYN=BitBool(),FIN=BitBool())window_size=UBInt16()checksum=UBInt16()urgent_pointer=UBInt16()# TODO: additional options if data_offset > 5classUDPFrame(Structure):source_port=UBInt16()destination_port=UBInt16()length=LengthField(UBInt16())checksum=UBInt16()data=Payload(length)classIPV4Frame(Structure):options=BitField(64,version=BitNum(4),internet_header_length=BitNum(4),differentiated_services_code_point=BitNum(6),explicit_congestion_notification=BitNum(2),total_length=BitNum(16),identification=BitNum(16),flags=BitNum(3),fragment_offset=BitNum(13),)time_to_live=UBInt8()protocol=DispatchField(UBInt8())header_checksum=UBInt16()source_ip_address=UBInt32()destination_ip_address=UBInt32()

从这些声明性定义中,可以创建消息 实例并打包它们或解析字节(包括流解析)以获取 您可以随意使用的对象。

有关更多信息,包括如何使用 请参考Full Documentation中的描述。

设计目标

图书馆力求遵循以下核心原则:

  • 简单的界面

    库的接口应该很简单,并且应该有 库api中的逻辑一致性。内部高级语言 使用了一些技术,但是api使用者不需要知道 这些细节。

  • 声明性语法

    在适当的情况下,库应设法为 指定尽可能声明性的协议。这些 声明应该明确,并且应该清楚 宣布。

  • 信息性错误消息

    在实现一个协议时,通常在 第一次。图书馆应该使用所有可用的信息 向api使用者提供信息,帮助他们找出 容易出问题的地方。

  • 常见用例应该很简单

    有些数据类型/模式在 协议。库中应该包含帮助处理这些情况的代码 让程序员的生活更轻松。

  • 不太常见的用例应该是可能的

    如果有一个协议与 规范,库仍然应该提供一些有用的代码 重复使用。图书馆的某些部分可能需要废弃,但是 希望人们不必从头开始。

许可证

这个软件是开源软件。Digi International版权所有, 2015年。

此源代码表单受mozilla public条款的约束 执照,2.0版。如果MPL的一个副本没有与此一起分发 文件,您可以在http://mozilla.org/MPL/2.0/获得一个。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用php调用java web服务时无法获取输出   java Netbeans:安装IMlet时出错。。。。仿真器错误   初始化期间Eclipse Juno SR 2中的java堆栈溢出   java在3d中寻找两个任意立方体的交集   代码中显示java“org.openqa.selenium.WebDriverException”错误   java使用AtomicInteger作为可变整数的替代品是一种好的做法吗?   当以编程方式设置背景颜色时,java版面在更新后会自动复制   java将字符串拆分为一个带有数字数据的字符串和另一个带有非数字数据的字符串   带有SSL协议的java AsyncHttpClient   C++服务器HTTN到java NtoHS客户端转换   java内存分配是基于引用类还是实例类?   java使用ProjectLombok安全吗?   grails“java版本”在命令提示符下不工作   java无法使用axis2实例化类型ADBDataSource   在Play Framework 2中进行多文件上传的java示例   java如何将二进制补码字符串转换为负十进制数?   windows 7在Java中获取不正确的操作系统名称   java如何禁用p:commandButton的enter键?   java如何从main方法加载servlet   java如何从imageView获取二进制位图