我们有一个数据包捕获程序,其中整个数据包由函数中的 this 输入 const u_char *p 表示。我们已经设法将其从十六进制转换为可读字符。我现在面临的挑战是如何存储到另一个需要进一步字符串处理的数组中?我正在尝试使用这种方法,但不确定这种方法是否正确?但这似乎也不太动态。
char all[1500];
for(i = 0; i < h->caplen; i++)
{
printf("%02X ", p[i]);
printf("\n");
sprintf(all,"%02X ",p[i]);
}
对于十六进制的部分数据包是这个 474554202f6d61696c2f20485454502f312e310d0a 但是当我们以正常字符查看时是这个 GET/mail/HTTP/1.1\r\n。我的挑战是选择我需要检查是否有 get 或 post 并以 http/1.1 或 http/1.0 结尾的 url?
提取语法
char *getPointer = strstr (all, "GET");
char *httpPointer = strstr (all, "HTTP/1.");
最佳答案
将字符串 (char *) 转换为二进制 (hex)。十六进制数组将是 char 数组长度的 1/2。使用 strstr ()
解析十六进制数组以获取标记(例如“GET”)。到目前为止,您的方法是要走的路。
关于从十六进制转换为普通字符并进行字符串操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20258117/