Как я могу получить IP и ПОРТ из полезной нагрузки без знака char buf?

0

У меня есть unsigned char buf:

IP находится в позиции 197, а порт находится в позиции 205. Как я могу получить правильный IP и PORT из этого unsigned char buf?

Я попробовал конвертировать некоторые цифры, но не повезло :(

Любая помощь или намек оцениваются.

  • 0
    Какую «конвертацию чисел» вы пробовали? Опубликовать код
  • 1
    Вы пробовали: port = buf [196]; `?
Показать ещё 6 комментариев
Теги:
char
unsigned
payload

2 ответа

1

Я предполагаю, что IP начинается на 197-й позиции и занимает 4 места в массиве (1 для каждого октананта) и 1 место для порта. В C/C++ 197-ю позицию следует получить с индексом 196. Таким образом, вы можете получить доступ к 4 октанам IP-адреса и адреса порта следующим образом,

short int octants[] ={buf[196],buf[197],buf[198],buf[199]} ;
short int portId = buf[204] ; 
  • 0
    Смотрите мой отредактированный пост, я пробовал с простой программой, но это неверно.
0

Хорошо, я нашел решение, спасибо за удар в правильном направлении, ребята :)

Код, который выводит правильный результат:

printf("IP: %d.%d.%d.%d", buf[197], buf[198], buf[199], buf[200]);

int port = 0;                           // Start with zero
port |= buf[204] & 0xFF;                // Assign first byte to port using bitwise or.
port <<= 8;                             // Shift the bits left by 8 (so the byte from before is on the correct position)
port |= buf[205] & 0xFF;

printf(" Port: %d", port);

И результат: IP: 8.8.8.8 Порт: 53

Ещё вопросы

Сообщество Overcoder
Наверх
Меню