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。
如何获得它
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导入)
pyDiameter | RFC6733 |
---|---|
DiaAVPStr | OctectString |
DiaAVPInt32 | Integer32 |
DiaAVPUInt32 | Unsigned32 |
DiaAVPInt64 | Integer64 |
DiaAVPUInt64 | Unsigned64 |
DiaAVPFloat32 | Float32 |
DiaAVPFloat64 | Float64 |
DiaAVPGroup | Grouped |
所有diaavpxxx类都派生自diaavp,diaavp在pydiameter.pydiaavpbase中定义。用户无法初始化diaavp对象,因为它是一个抽象类。
diaavp的所有子类都有一个名为getavptype()的方法。
它返回一个描述对象类型的python字符串。
返回值可以是以下值之一。(从pydiameter.pydiaavpconst导入)
Const | Value |
---|---|
AVP_TYPE_UNKNOWN | unknown |
AVP_TYPE_STR | str |
AVP_TYPE_INT32 | int32 |
AVP_TYPE_UINT32 | uint32 |
AVP_TYPE_INT64 | int64 |
AVP_TYPE_UINT64 | uint64 |
AVP_TYPE_FLOAT32 | float32 |
AVP_TYPE_FLOAT64 | float64 |
AVP_TYPE_GROUP | grp |
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基本类型派生的。
Functions | Examples |
---|---|
address_to_bytes | address_to_bytes((‘ipv4’,‘172.18.0.1’)); address_to_bytes((‘ipv6’,‘2000:1234:ac12:abcd:abcd:abcd:abcd:abc1’)) |
bytes_to_address | bytes_to_address(diameter_address_avp_bytes_buff) |
time_to_bytes | time_to_bytes(year=1980, month=7 , day=8, hour=20, minute=0, second=0) |
bytes_to_time | bytes_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。
任何其他问题,请参阅下面的“任何问题”部分。