我正在为在线游戏编写数据包查看器,到目前为止一切进展顺利。
我遇到了以下问题:我的代码忽略了数据包上的一些字符。
以下是我使用Wireshark或WPE等软件时的数据包示例:
该数据包有36个字节,其中第二个十六进制数是数据包长度减去前两个字节(只是解释^^)。
就像我说的,上面的数据包是我使用WPE / Wireshark得到的。现在让我们看看我使用我的代码得到了什么:
03 22 0a c3 aa c3 aa c3 aa c3 aa c3 aa 10 9a 46 c1 c0 48 6f ae c8 52 f1 c2 86 c2 ea 2c 7d
你看到了区别吗?数据包(部分)与36字节长度相同,但最后6个字节被省略,即00 04 FF FF FF FF
。为什么会这样?
这是我捕获数据包的代码:
int WINAPI SendHook(SOCKET s, const char* buf, int len, int flags)
{
if (buf[0] == 0x03) {
ofstream testfile;
string hex = Hex::ToUtf8Hex(string(buf)); //packet hex data
testfile.open("C:/test.txt", std::ios_base::app || std::ios_base::ate);
testfile << hex;
tesfile.close();
}
return pSend(s, buf, len, flags);
}