Pydeader由George Zhao创建,他为诺基亚工作,2010-2012,2014-2018。此库用于对diameter协议消息进行编码和解码(aaa协议替换radius)。

pyDiameter的Python项目详细描述


简介

pydiameter是一个用于解码和编码diameter协议消息的库。

diameter协议是aaa协议,在rfc6733中定义(rfc3588被rfc6733废弃)。

解码diameter协议消息意味着,库将帮助应用程序将protolcol字节解码到库对象,这更易于处理。

编码diameter协议消息意味着,库将帮助应用程序将库对象(通常是pydiameter库中的diametage对象)编码为字节变量。

pydiameter完全由python编写。

pydiameter是在python 3.6.5上编写的,不支持python 2。

作者

2010-2012年、2014-2018年为诺基亚工作的George Zhao。

maito:georgezhao_1980@163.com

如何获得它

pip install pyDiameter

开始

要开始使用pydiameter解码或编码diameter消息,可以在安装pip之后阅读该示例。

示例文件夹位于python站点包中的pydiameter文件夹中。

请参阅example-dicttest.py以开始Diameter协议AVP字典。

字典

这本字典包含2000多个AVP定义,还包括一些流行的供应商定义(Base、3GPP、Nokia、Ericsson、Cisco等)

请注意,解码取决于pydiameter.pydiaavpdict中定义的字典,如果您有一些特殊的avp定义,而本字典中没有包含这些定义,example-dicttest.py可以帮助您了解如何在字典中添加新的avp定义,以及如何更新它。

在解码diameter消息之前,请确保字典中定义了所有需要定义的定义。

AVP和消息

请参阅example-avp.py以开始Diameter Protolcol AVP处理。

并参考example-msg1.py以开始diameter协议消息处理。

如果你想要一个像“你好,世界”这样的例子,请参考下面的代码。

from pyDiameter.pyDiaMessage import DiaMessage
from pyDiameter.pyDiaAVPTypes import DiaAVPStr
from pyDiameter.pyDiaAVPPath import DiaAVPPath

msg = DiaMessage()
msg.setRequestFlag()
avp = DiaAVPStr()
avp.setAVPCode(263)
avp.setAVPVSFlag()
avp.setAVPVendor(10415)
avp.setAVPValue(b'Hello, world.')
dap = DiaAVPPath()
dap.setPath('')
msg.addAVPByPath(dap, avp)

pydiameter只支持rfc6733中定义的基本类型。

有关支持的类型列表,请参阅下表。(从pydiameter.pydiaavptypes导入)

pyDiameterRFC6733
DiaAVPStrOctectString
DiaAVPInt32Integer32
DiaAVPUInt32Unsigned32
DiaAVPInt64Integer64
DiaAVPUInt64Unsigned64
DiaAVPFloat32Float32
DiaAVPFloat64Float64
DiaAVPGroupGrouped

所有diaavpxxx类都派生自diaavp,diaavp在pydiameter.pydiaavpbase中定义。用户无法初始化diaavp对象,因为它是一个抽象类。

diaavp的所有子类都有一个名为getavptype()的方法。

它返回一个描述对象类型的python字符串。

返回值可以是以下值之一。(从pydiameter.pydiaavpconst导入)

ConstValue
AVP_TYPE_UNKNOWNunknown
AVP_TYPE_STRstr
AVP_TYPE_INT32int32
AVP_TYPE_UINT32uint32
AVP_TYPE_INT64int64
AVP_TYPE_UINT64uint64
AVP_TYPE_FLOAT32float32
AVP_TYPE_FLOAT64float64
AVP_TYPE_GROUPgrp

avp路径

在pydiameter.pydiamesage中操作diamessage对象时,有时需要访问、添加或从消息中删除一些avp。

您可以使用diaavppath对象来定位消息中的avp。

diaavppath可以从pydiameter.pydiaavppath导入。

diaavppath对象使用diameter avp路径语言来描述avp路径。(由乔治赵定义,不是一种众所周知的语言。)

avp路径描述为:

'vendor/avpCode[sameCodeIndex]->vendor/avpCode[sameCodeIndex]->vendor/avpCode[sameCodeIndex]...'

例如,10415/628[1]->;10415/630[0]表示我想访问AVP,位置是:第二个AVP 628(供应商10415)下的第一个AVP 630(供应商10415)。

same code index是指如果有多个具有相同avp代码和供应商的相同avp,则要访问哪个索引。

注意,samecodeindex从零开始计数。

工具

在pydiameter.pydiaavptools中,我们提供了四个函数来帮助您处理一些特殊的avp类型。

地址类型和时间类型都是根据rfc6733从octectstring基本类型派生的。

FunctionsExamples
address_to_bytesaddress_to_bytes((‘ipv4’,‘172.18.0.1’)); address_to_bytes((‘ipv6’,‘2000:1234:ac12:abcd:abcd:abcd:abcd:abc1’))
bytes_to_addressbytes_to_address(diameter_address_avp_bytes_buff)
time_to_bytestime_to_bytes(year=1980, month=7 , day=8, hour=20, minute=0, second=0)
bytes_to_timebytes_to_time(bytes_buff)
请注意,时间从1968年1月20日,03:14:08开始计算,到2104年2月26日,09:42:23为止,根据RFC6733和甚至废弃的RFC4330进行计算。

工具仅支持IPv4和IPv6,其他协议应由用户作为普通的octectstring处理。

设置IPv6值时,压缩IPv6值可以由工具支持,如2000::1或::1。

任何其他问题,请参阅下面的“任何问题”部分。

任何问题

请联系georgezhao_1980@163.com

作者将不定期检查邮件,不保证支持。

作者会尽快回答问题。

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

推荐PyPI第三方库


热门话题
Java Double。将长位加倍到C#位转换器。ToDouble   java如何使用正则表达式从固定的Y位数中提取最后的X位数?   java如何显示ChatMessage类列表中的字符串消息属性?   java从JSON或XML提要导入数据,并在Android中创建列表   在整数之间使用按位AND运算符的java好处?   java从Android中的Bean类获取空值?   java会话id对另一台服务器意味着什么?   java未选择案例时开关的工作方式   java组织。openqa。硒。SessionNotCreatedException:无法创建新的远程会话。在emulator中初始化安卓驱动程序时   JavaSWT父和子对话框通信   java请确保java_HOME指向JDK而不是JRE   java用户即使在成功登录后也是匿名的   java控制器单元测试无法自动连接所需的bean   Java小程序类文件