【问题标题】:How can i get IP and PORT from payload unsigned char buf?如何从有效负载 unsigned char buf 中获取 IP 和 PORT?
【发布时间】:2014-04-12 19:42:09
【问题描述】:

我有 unsigned char buf:

IP 位于位置 197,端口位于位置 205。 如何从这个 unsigned char buf 获得正确的 IP 和 PORT?

我尝试了一些数字转换但没有运气:(

感谢任何帮助或提示。

【问题讨论】:

  • 你试过什么“数字转换”?贴一些代码。
  • 你试过了吗:port = buf[196];` ?
  • 你试过getpeername()吗?还是recvfrom()?
  • 我尝试了十六进制到十进制,十六进制到二进制,十六进制到文本...我尝试了 port = buf[196] 我在那个位置得到了 8。
  • 如何尝试 getpeername() 或 recvfrom() ?

标签: c++ c char unsigned payload


【解决方案1】:

我假设,IP 从第 197 个位置开始,它在数组中占据 4 个位置(每个八分圆 1 个位置)和 1 个端口位置。在 C/C++ 中,第 197 位应该使用索引 196 访问。因此,您可以通过以下方式访问 IP 和端口地址的 4 个八分圆,

short int octants[] ={buf[196],buf[197],buf[198],buf[199]} ;
short int portId = buf[204] ; 

【讨论】:

  • 查看我编辑的帖子,我尝试了简单的程序,但它不正确。
【解决方案2】:

好的,我找到了解决方案,感谢你们朝正确的方向踢球:)

输出正确结果的代码是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2019-03-27
    相关资源
    最近更新 更多