c - 代表 serv_addr 缓冲区的字符串是什么格式?

标签 c networking format byte

所以我一直在阅读这个关于如何使用 Frida 的教程:https://www.frida.re/docs/functions/我遇到过以下情况:

$ ./client 127.0.0.1
connect() is at: 0x400780

Here's the serv_addr buffer:
02 00 13 88 7f 00 00 01 30 30 30 30 30 30 30 30
Press ENTER key to Continue

教程指出字节代表 0x1388 或 5000,因此很明显它不是十六进制或十进制。我尝试使用 base64 转换器来转换字符串,看看是否出现 0x1388 或 5000,但没有成功。

这到底是什么格式?我最近没有做过低级编程,如果我记得的话,字节是由 8 位 1 和 0 组成的组。

编辑: 是的,教程指出这代表一个结构。但他怎么知道它代表0x1388呢?如果我收到这样的字符串,有没有办法让我理解它代表一个特定的值,而无需成为发送消息的代码的作者?

最佳答案

代码的相关部分是这样的:

printf ("\nHere's the serv_addr buffer:\n");
b = (unsigned char *) &serv_addr;
for (i = 0; i != sizeof (serv_addr); i++)
  printf ("%s%02x", (i != 0) ? " " : "", b[i]);

它所做的只是从结构体serv_addr(其类型为struct sockaddr_in)中打印原始数据。

这里没有“字符串”(在 C 空终止字节字符串的意义上)。

0x1388serv_addr.sin_port 的值,打印为第三个和第四个字节(1388 ,按网络( big endian )字节顺序)。

<小时/>

知道输出是 sockaddr_in 结构的原始数据,我们可以轻松解密数据

  • 02 00 这是 sin_family 成员,值为 2(十进制)。该值对应于AF_INET。这是按主机字节顺序排列的。

  • 13 88 这是(如前所述)sin_port 中端口的网络字节顺序。

  • 7f 00 00 01 这是 sin_addr 成员,对应于 IP 地址 127.0.0.1 ( 7f127)。这也是网络字节顺序。

  • 其余的 30 30 30 30 30 30 30 30 是“垃圾”,它将结构填充到 struct sockaddr 的常见大小,其中长度为 16 个字节。

关于c - 代表 serv_addr 缓冲区的字符串是什么格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301014/

相关文章:

c# - 如何编写 .Net UDP 可扩展服务器

python - Python/Mongo 的网络压缩

c++ - MPI_Op_create : candidate function not viable. 自定义结构指针不能解释为空指针

c - 8 位系统上的 2 位乘法

c - 如果我们在 SMP 上的中断处理程序中休眠会发生什么

c - c 中的 gethostbyname() 替代品

html - 如何居中并垂直对齐页面内的div?

string - Powershell字符串到数字功能?

c++ - 以正确的方式使用 C/C++ 读取文件格式

c - Valgrind 发现指针的 memleak