Итак, ниже мой код. Я попытался создать конкретный пакет UDP для отправки через Ethernet.
import socket
UDP_IP = "0.0.0.0" #I have used the actual Ip address here
UDP_PORT = 8543
MESSAGE = None
print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE ,"\n"
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
# struct of a first block
dict1 = {'ID': ''}
data_20 = 200
data_200 = hex(data_20)
print data_200, '\n'
# struct of 2nd block
dict2 = {'Cmd': '', 'channel': '', 'k': ''}
data_S = '0x2 0x0 0x0'
data_arr1 = data_S.split(' ')
print data_arr1, '\n'
dict2['Cmd'] = data_arr1[0]
dict2['channel'] = data_arr1[1]
dict2['k'] = data_arr1[2]
print 'k =',dict2['k'], '; Cmd = ', dict2 ['Cmd'], '; channel = ',dict2 ['channel'],"\n"
MESSAGE = data_200 + ' ' + data_S
print "message:", MESSAGE ,"\n"
sock.sendto(str(MESSAGE), (UDP_IP, UDP_PORT)) #Even if I remove the 'str' for the message I still read the same message over wireshark
Вот вывод для того же (я удалил IP-адрес)
UDP target port: 8543
message: None
0xc8
['0x2', '0x0', '0x0']
k = 0x0 ; Cmd = 0x2 ; channel = 0x0
message: 0xc8 0x2 0x0 0x0
Process finished with exit code 0
И данные Wireshark для того же
0020 30 78 63 38 20 30 0xc8 0
0030 78 32 20 30 78 30 20 30 78 30 x2 0x0 0x0
Я не получаю то же значение, которое пытался отправить в пакете. Поэтому я попытался с немного другим подходом, код для того же ниже
import socket
UDP_IP = "0.0.0.0" #I have used the actual Ip address here
UDP_PORT = 8543
MESSAGE = None
print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE ,"\n"
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
# struct of first block
dict1 = {'ID': ''}
data_20 = 200
data_200 = hex(data_20)
print data_200, '\n'
# struct of 2nd block
dict2 = {'Cmd': '', 'channel': '', 'k': ''}
#data_S = '0x2 0x0 0x0'
data_S = [0x02, 0x00, 0x00]
#data_arr1 = data_S.split(' ')
print data_S, '\n'
dict2['Cmd'] = data_S[0]
dict2['channel'] = data_S[1]
dict2['k'] = data_S[2]
print 'k =',dict2['k'], '; Cmd = ', dict2 ['Cmd'], '; channel = ',dict2 ['channel'],"\n"
MESSAGE = data_200 + ' ' + data_S #Evem if I remove the '' in the line I still get the same error
print "message:", MESSAGE ,"\n"
sock.sendto(str(MESSAGE), (UDP_IP, UDP_PORT))
Таким образом, в вышеупомянутом подходе я попытался использовать значения в качестве списка для ключей, а позже назначил список для ключей. Но я получаю ошибку, как это
MESSAGE = data_200 + ' ' + data_S
TypeError: cannot concatenate 'str' and 'list' objects
Process finished with exit code 1
Итак, теперь я хочу увидеть данные, которые я отправляю в пакете, на wireshark. Как отправить? Что мне делать?