python发送diameter协议消息,使用wireshack抓包 将发送的消息进行diameter decode
import socket
import struct
# Diameter 协议常量
DIAMETER_HEADER_LENGTH = 20
DIAMETER_REQUEST_FLAG = 0x80
DIAMETER_APPLICATION_ID = 16777236
# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 60000))
# 准备 Diameter 请求
session_id_avp = struct.pack('!IHH', 263, 61, 0x40) + '12345'
origin_host_avp = struct.pack('!IHH', 264, 47, 0x40) + 'qwert'
message_length = DIAMETER_HEADER_LENGTH + len(session_id_avp) + len(origin_host_avp)
header = struct.pack('!BBHI', DIAMETER_REQUEST_FLAG, 0, message_length, 265)
header += struct.pack('!L', DIAMETER_APPLICATION_ID)
header += struct.pack('!L', 0) # Hop-by-Hop Identifier
header += struct.pack('!L', 0) # End-to-End Identifier
diameter_request = header + session_id_avp + origin_host_avp
# 发送 Diameter 请求
sock.sendall(diameter_request)
# 接收 Diameter 响应
response = sock.recv(1024)
if response:
print('Received response:', response)
else:
print('No response received')
# 关闭套接字
sock.close()
抓包结果
请指点一下