Я использую модифицированную версию https://github.com/houluy/UDP для анализа и отправки необработанных пакетов UDP.Однако иногда это случайным образом вызывает исключение в struct.pack ().Кажется, он не связан с определенным пакетом, но когда я увеличиваю скорость передачи пакетов, появляется ошибка.
Соответствующий код:
src_port = src_addr[1]
dest_port = dest_addr[1]
udp_length = 8 + len(data)
checksum = 0
pseudo_header = struct.pack('!BBH', zero, protocol, udp_length)
pseudo_header = src_ip + dest_ip + pseudo_header
try:
udp_header = struct.pack('!4H', src_port, dest_port, udp_length, checksum)
except struct.error as err:
print(err)
print("Port: " + str(src_port) + " = " + str(type(src_port)))
print("DestPort: " + str(dest_port) + " = " + str(type(src_port)))
print("Len: " + str(udp_length) + " = " + str(type(src_port)))
print("Checksum: " + str(checksum) + " = " + str(type(src_port)))
struct.pack выдает ошибкуОбязательный аргумент не является целым числом.Таким образом, я печатаю типы в предложении "исключение", чтобы проверить, что происходит не так.Я получаю следующий вывод:
required argument is not an integer
Port: 123 = <class 'int'>
DestPort: 123 = <class 'int'>
Len: 16 = <class 'int'>
Checksum: 0 = <class 'int'>
Я не имею ни малейшего понятия, что здесь происходит не так.Если бы я должен был явным образом привести значение к целым числам, чтобы быть уверенным в следующей строке, то произошло бы то же самоеВот.Запуск Python 3.6.7 в CentOS Linux версии 7.5.1804.