一个利用python binascii 实现 ICN数据包封装并利用UDP协议传输的示例:
from socket import *
import binascii
import json
address = ('192.168.44.145', 12321)
#address = ('192.168.100.150', 5000)
s = socket(AF_INET,SOCK_DGRAM)
#s.bind(address)
#while True:
# data,addr = s.recvfrom(2048)
#if not data:
# print("client has exist")
# break
flag=1
while flag:
EUID1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
length=len(EUID1)
print(length)
s_EUID=binascii.a2b_hex(EUID1)
EUID2='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
d_EUID=binascii.a2b_hex(EUID2)
sev_type=binascii.a2b_hex(hex(22).replace('0x',''))
Head_len=binascii.a2b_hex(hex(36).replace('0x',''))
ICN_cert=binascii.a2b_hex(hex(4444).replace('0x',''))
packet_type=binascii.a2b_hex('0'+hex(1).replace('0x',''))
EUID3='dddddddddddddddddddddddddddddddd'
c_EUID=binascii.a2b_hex(EUID3)
ACK_flag=binascii.a2b_hex('0'+hex(1).replace('0x',''))
data=s_EUID+d_EUID+ sev_type+Head_len\
+ICN_cert+packet_type+c_EUID+ACK_flag
print(data)
if not data:
break
s.sendto(data,address)
flag=0
#a = json.loads(data.decode('utf-8'))
#print(a['params']['PubKey'])
s.close()
该函数实现的主要功能:
1、实现ICN信令的封装
2、将ICN信令转换为流格式
3、利用UDP将ICN信令内容作为载荷发送给目标地址
该函数测试结果:
接收端可正确接收到发送的信令,并正确地解析出载荷中的ICN相关内容。
函数释义:
关于字符串转换成16进制流格式的过程如下:
(1)hex()函数的返回值是16进制字符串
例如:0x1=hex(‘1’)
(2)a2b_hex()函数是将ASCII码转换成2进制数并用16进制表示,返回值中将字符串中每两位字符转换成一个16进制数字符串转换后,输出的字符串比输入的字符串缩短一半。