Неизвестный код операции от TFTP-клиента при просмотре в wireshark

Добрый вечер всем.

У меня возникают проблемы при создании клиента TFTP для назначения в C ++, который использует #include

Я отправляю буфер символов:

буфер = { ‘0’, ‘2’, ‘е’, ‘я’, ‘L’, ‘е’, ‘N’, ‘а’, ‘т’, ‘е’, ‘0’, ‘о’ , ‘с’, ‘т’, ‘е’, ‘т’, ‘0’};

Используя код:

sendto (sock, buffer, strlen (buffer), 0, (sockaddr *) &serverAddr, sizeof (sockaddr));

Но когда я смотрю на эту передачу в WireShark, она говорит: «Код операции: неизвестно (12338)», когда я смотрю на часть кода операции.
Даже если он выбрал код операции из строки

введите описание изображения здесь

Я абсолютно застрял, любая помощь будет оценена. Я уверен, что если я смогу отправить и получить сообщение, я легко справлюсь с остальными.

Просто бросил здесь, что я сделал, но отмеченный ответ был в основном это
Использовал БАЙТ из winsock2 (не знаю, нужно ли мне, но лучше, чем потом сожалеть)

буфер = {(BYTE) 0, (BYTE) 2, ‘е’, ‘я’, ‘L’, ‘е’, ‘N’, ‘а’, ‘т’, ‘е’, (BYTE) 0, ‘о’, ‘с’, ‘т’, ‘е’, ‘т’, (BYTE) 0};

а также

sendto (sock, buffer, sizeof (buffer), 0, (sockaddr *) &serverAddr, sizeof (sockaddr));

1

Решение

Не strlen(buffer) но sizeof(buffer)

Стрлен перестает присматривать за персонажами при первом появлении '\0' — так что он возвращает неопределенное значение для вашего буферного массива, так как '\0' нет в вашем буфере.

Если вы хотите начать свой буфер с кодом операции 02 затем передайте его как целые числа, а не их представление цифр

buffer={0,2,'f','i','l','e','n','a','m','e','0','o','c','t','e','t','0'};
//      ^ ^  simple numbers - not characters - not sure about rest of your buffer
2

Другие решения

12338 в десятичном виде — 0x30, 0x32 в шестнадцатеричном, что соответствует ‘0’ и ‘2’ из вашего буфера.

Вы используете символы ascii, но вам нужно использовать десятичное / целое число, установив их в (char) 0x00 а также (char) 0x02 в вашем буфере.

1

По вопросам рекламы [email protected]