UDP-пакет Python не совпадает в Wireshark - PullRequest
0 голосов
/ 15 мая 2018

Итак, ниже мой код. Я попытался создать конкретный пакет 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. Как отправить? Что мне делать?

...