如何通过Python sock.send() 发送非字符串数据?
我刚开始学习Python编程,实在是没办法,只能快速拼凑了一个程序。
我想通过UDP发送一些数据,除了在调用socket.send()时必须把数据以字符串形式输入之外,其他都运作得很好。下面是我的程序,你可以看看我在做什么:
import socket
IPADDR = '8.4.2.1'
PORTNUM = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.connect((IPADDR, PORTNUM))
s.send('test string'.encode('hex'))
s.close()
我该怎么做才能像这样用十六进制发送数据,比如s.send(ff:23:25:a1),这样当我在Wireshark中查看数据包的内容时,可以看到ff:23:25:a1呢?
2 个回答
2
你可以先创建一个十六进制值的列表,像下面这样:
hex_list = [0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00]
然后,把这些值作为字节发送出去:
s.sendto(bytes(hex_list), addr1)
19
你是在用Python 2.7还是3.2版本呢?
在3.2版本中,你可以这样做:
data = bytes.fromhex('01AF23')
s.send(data)
这样,数据就会变成:
b'\x01\xAF\x23'
而在2.7版本中,你可以用下面的方法实现同样的效果:
data = '01AF23'.decode('hex')