最近在使用PacketCE抓包的时候出现一开始抓包外网就不能通本机网卡的问题。
经查是因为设置缓冲区大小导致的,但是查看了代码找不到问题在哪,还求大神指导!
设置缓冲区大小代码如下:
// get the size to allocate
nValue = ((PULONG)pBufIn)[0];
// free the old buffer
if (pOpenInst->Buffer != NULL) {
NdisFreeMemory (pOpenInst->Buffer, pOpenInst->BufSize, 0);
}
pOpenInst->Buffer = NULL;
// allocate the new buffer
if (nValue > 0) {
NdisAllocateMemory ((PVOID*)&pTempBuf, nValue, 0, NDIS_ADDR_M1);
if (pTempBuf == NULL) {
pOpenInst->BufSize = 0;
return FALSE;
}
pOpenInst->Buffer = pTempBuf;
}
pOpenInst->Bhead = 0;
pOpenInst->Btail = 0;
pOpenInst->BLastByte= 0;
pOpenInst->BufSize = (UINT)nValue;
SAFE_SET(pdwActualOut, nValue);
------解决方案--------------------
将设置缓冲区的代码在哪里?
PacketCE这个包太老了,后来都没有更新ce版本。问题多多,不建议LZ使用。
普通抓包可以通过Raw socket编程实现,不过这种方法有缺陷,不是什么包都能抓到的。
如果所有类型包都要抓,建议直接修改网卡驱动,添加对应的接口,我以前就这么干的。