Example #1
0
m_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
m_sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)

u_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
u_sock.settimeout(5)
u_sock.bind((UDP_IP, UDP_PORT))

head = bytes([0x01,         # handle
              0x00,         # tx opts
              0x1c, 0xaa,   # sensor panid, little endian
              0x00, 0x00])  # sensor short addr, little endian

dh = ECDH()
# test private key (RFC 5114 test vector)
dh.private_key = int('814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF', 16)
dh.gen_public_key()

dap = b''.join([x.to_bytes(length=32, byteorder='big') 
    for x in dh.public_key])
# msdu = mID + pubkey
msdu = bytes([0x01]) + dap
mpdu = bytes([len(msdu)]) + msdu

REQ = bytes([0x17]) + head + mpdu
REQ = bytes([len(REQ)]) + REQ

try:
    m_sock.sendto(REQ, (MCAST_GRP, MCAST_PORT))
    print('sent data request: ', hexlify(REQ))