我正在使用python 2.7
import socket
domain = 'example.com'
UDP_IP = "8.8.8.8"
UDP_PORT = 53
packet = [88, 89, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0]
for part in domain.split('.'):
packet.append(len(part))
for char in list(part):
packet.append(ord(char))
packet += [0, 0, 15, 0, 1]
print packet
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(bytearray(packet), (UDP_IP, UDP_PORT))
data = sock.recv(1024)
sock.close()
print repr(data)
打印出以下内容:
[88, 89, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 101, 120, 97, 109, 112, 108, 101, 3, 99, 111, 109, 0, 0, 15, 0, 1]
'XY\x81\x80\x00\x01\x00\x00\x00\x01\x00\x00\x07example\x03com\x00\x00\x0f\x00\x01\xc0\x0c\x00\x06\x00\x01\x00\x00\x01z\x00-\x03sns\x03dns\x05icann\x03org\x00\x03noc\xc0-xHoU\x00\x00\x1c \x00\x00\x0e\x10\x00\x12u\x00\x00\x00\x0e\x10'
但是如何将返回的字节(似乎以字符串形式出现)转换回int[]
?
C#中的代码如下所示:
byte[] recv = udpclient.Receive(IPEndPoint);
int[] resp = new int[recv.Length];
for (int i = 0; i < resp.Length; i++)
resp[i] = Convert.ToInt32(recv[i]);
答案 0 :(得分:0)
列表理解(参见:https://docs.python.org/3.6/tutorial/datastructures.html#list-comprehensions)似乎是“转换”的正确行动方案:
data = [ord(i) for i in data]
或者只是在从套接字接收时执行此操作:
data = [ord(i) for i in sock.recv(1024)]