SMPP协议中解析协议数据单元(PDU)的库

smpppdu的Python项目详细描述


smppdu(从smpp.pdu分叉)

smppdu是一个python3库,用于解析smpp协议中的协议数据单元(pdu)

http://www.nowsms.com/discus/messages/1/24856.html

安装

$ pip install smpppdu

示例

解码(解析)pdu

importbinasciiimportiofromsmpp.pdu.pdu_encodingimportPDUEncoderhex='0000004d00000005000000009f88f12441575342440001013136353035353531323334000101313737333535353430373000000000000000000300117468657265206973206e6f2073706f6f6e'binary=binascii.a2b_hex(hex)file=io.BytesIO(binary)pdu=PDUEncoder().decode(file)print(f"PDU: {pdu}")# Prints the following:## PDU: PDU [command: deliver_sm, sequence_number: 2676551972, command_status: ESME_ROK# service_type: AWSBD# source_addr_ton: INTERNATIONAL# source_addr_npi: ISDN# source_addr: 16505551234# dest_addr_ton: INTERNATIONAL# dest_addr_npi: ISDN# destination_addr: 17735554070# esm_class: EsmClass[mode: DEFAULT, type: DEFAULT, gsmFeatures: set()]# protocol_id: 0# priority_flag: LEVEL_0# schedule_delivery_time: None# validity_period: None# registered_delivery: RegisteredDelivery[receipt: NO_SMSC_DELIVERY_RECEIPT_REQUESTED, smeOriginatedAcks: set(), intermediateNotification: False]# replace_if_present_flag: DO_NOT_REPLACE# data_coding: DataCoding[scheme: DEFAULT, schemeData: LATIN_1]# sm_default_msg_id: None# short_message: b'there is no spoon'# ]

创建和编码pdu

importbinasciifromsmpp.pdu.pdu_typesimport(AddrTon,AddrNpi,EsmClass,EsmClassMode,EsmClassType,PriorityFlag,RegisteredDelivery,RegisteredDeliveryReceipt,ReplaceIfPresentFlag,DataCoding,DataCodingScheme,DataCodingGsmMsg,DataCodingGsmMsgCoding,DataCodingGsmMsgClass)fromsmpp.pdu.operationsimportSubmitSMfromsmpp.pdu.pdu_encodingimportPDUEncoderpdu=SubmitSM(9284,service_type='',source_addr_ton=AddrTon.ALPHANUMERIC,source_addr_npi=AddrNpi.UNKNOWN,source_addr='mobileway',dest_addr_ton=AddrTon.INTERNATIONAL,dest_addr_npi=AddrNpi.ISDN,destination_addr='1208230',esm_class=EsmClass(EsmClassMode.DEFAULT,EsmClassType.DEFAULT),protocol_id=0,priority_flag=PriorityFlag.LEVEL_0,registered_delivery=RegisteredDelivery(RegisteredDeliveryReceipt.SMSC_DELIVERY_RECEIPT_REQUESTED),replace_if_present_flag=ReplaceIfPresentFlag.DO_NOT_REPLACE,data_coding=DataCoding(DataCodingScheme.GSM_MESSAGE_CLASS,DataCodingGsmMsg(DataCodingGsmMsgCoding.DEFAULT_ALPHABET,DataCodingGsmMsgClass.CLASS_2)),short_message=b'HELLO',)print(f"PDU: {pdu}")binary=PDUEncoder().encode(pdu)hexStr=binascii.b2a_hex(binary)print(f"HEX: {hexStr}")# Prints the following:## PDU: PDU [command: submit_sm, sequence_number: 9284, command_status: ESME_ROK# service_type: # source_addr_ton: ALPHANUMERIC# source_addr_npi: UNKNOWN# source_addr: mobileway# dest_addr_ton: INTERNATIONAL# dest_addr_npi: ISDN# destination_addr: 1208230# esm_class: EsmClass[mode: DEFAULT, type: DEFAULT, gsmFeatures: set()]# protocol_id: 0# priority_flag: LEVEL_0# schedule_delivery_time: None# validity_period: None# registered_delivery: RegisteredDelivery[receipt: SMSC_DELIVERY_RECEIPT_REQUESTED, smeOriginatedAcks: set(), intermediateNotification: False]# replace_if_present_flag: DO_NOT_REPLACE# data_coding: DataCoding[scheme: GSM_MESSAGE_CLASS, schemeData: DataCodingGsmMsg[msgCoding: DEFAULT_ALPHABET, msgClass: CLASS_2]]# sm_default_msg_id: None# short_message: b'HELLO'# ]# HEX: b'000000360000000400000000000024440005006d6f62696c65776179000101313230383233300000000000000100f2000548454c4c4f'

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

推荐PyPI第三方库


热门话题
java ArrayList<String>对象指向null。为什么?   java如何在tomcat中设置自定义环境变量?   java为什么使用树结构来支持搜索?   java静态和非静态方法之间的区别   JavaSpring集成聚合和转换   java如何在CSS中使用背景图像?   Android v1p1beta1语音java。lang.NoSuchMethodError:没有静态方法decodeBase64   java XStream在加载和保存时损坏值   swing Java绘图程序   java当我们只能访问接口时,有可能访问接口实现方法吗?   从Java对象获取JSON路径   java连接。getMetaData似乎不返回表信息   java是否可以将单个Spring数据源与多个TransactionManager一起使用?   java graph使用我访问的节点查找到原点的最短路径