Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1306回复:0

fracker也帮我看看我这个问题吧,还有其他的高手们

楼主#
更多 发布于:2005-03-24 23:31
是这样的,我想试一下用IMD发包的程序,我现在的测试是一收到一个ICMP包后马上再回一个ICMP包,首先检测ICMP已经是没问题了,现在的问题是收到ICMP包后再回一个ICMP包时机器马上就蓝屏重启,请各位帮我看一下到底是怎么回事。谢谢
NDIS_STATUS
PtReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer, // 包头
IN UINT HeaderBufferSize, // 包头大小,以太网环境下为14
IN PVOID LookAheadBuffer, // 前视缓冲
IN UINT LookAheadBufferSize, // 前视缓冲区大小
IN UINT PacketSize // 数据包总大小(不包括包头)
)
if(FALSE){}
else if(PacketSize <= LookAheadBufferSize)  // 如果 LookAheadBuffer 中包含了全部数据
{
// 分配内存
Status = NdisAllocateMemory(&pPacketContent, BUFFER_SIZE, 0, HighestAcceptableMax);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"PTReceive:NdisAllocateMemory Failed\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
if(pPacketContent == NULL)
{
DbgPrint(\"PTReceive:pPacketContent==NULL\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
// 将包头和 LookAheadBuffer 复制到新分配的内存中
NdisZeroMemory(pPacketContent, BUFFER_SIZE);
NdisMoveMemory(pPacketContent, HeaderBuffer, HeaderBufferSize);
NdisMoveMemory(pPacketContent+ HeaderBufferSize, LookAheadBuffer, LookAheadBufferSize);
PacketLen = PacketSize+HeaderBufferSize;

if(ICMP == 1)
{
P_IP_PACKET p_ip;
p_ip = (P_IP_PACKET)pPacketContent;
// 检测是否为 ICMP 数据包
if(p_ip->H_frame_type == 8 && p_ip->L_frame_type == 0 && p_ip->proto == 1)
{
Status = NdisAllocateMemory(&Packetback, BUFFER_SIZE, 0, HighestAcceptableMax);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"PTReceive:NdisAllocateMemory Failed\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
if(Packetback == NULL)
{
DbgPrint(\"PTReceive:Packeback==NULL\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}

Status = NdisAllocateMemory(&pPacketContent1, BUFFER_SIZE, 0, HighestAcceptableMax);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"PTReceive:NdisAllocateMemory Failed\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
if(pPacketContent1 == NULL)
{
DbgPrint(\"PTReceive:pPacketContent1==NULL\\n\");
return(NDIS_STATUS_NOT_ACCEPTED);
}
// 将包头和 LookAheadBuffer 复制到新分配的内存中
NdisZeroMemory(Packetback, BUFFER_SIZE);
NdisZeroMemory(pPacketContent1,BUFFER_SIZE);
NdisMoveMemory(pPacketContent1, pPacketContent, PacketLen);
pPacketContent1[0] = 0x00;
pPacketContent1[1] = 0x0b;
pPacketContent1[2] = 0xdb;
pPacketContent1[3] = 0xda;
pPacketContent1[4] = 0xcb;
pPacketContent1[5] = 0x9f;
pPacketContent1[6] = 0x00;
pPacketContent1[7] = 0x40;
pPacketContent1[8] = 0x45;
pPacketContent1[9] = 0x11;
pPacketContent1[10] = 0xc0;
pPacketContent1[11] = 0x29;
pPacketContent1[26] = 0xc0;
pPacketContent1[27] = 0xa8;
pPacketContent1[28] = 0x00;
pPacketContent1[29] = 0x03;
pPacketContent1[30] = 0xc0;
pPacketContent1[31] = 0xa8;
pPacketContent1[32] = 0x00;
pPacketContent1[33] = 0x02;

NdisMoveMemory(Packetback, pPacketContent1, PacketLen);
NdisFreeMemory(pPacketContent1,2000,0);
NdisSend(&Status,
pAdapt->BindingHandle,
Packetback);


if (Status != NDIS_STATUS_PENDING)
{
// NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
NdisFreePacket(Packetback);
}

DbgPrint(\"ICMP被拦截!\\n\");
NdisFreeMemory(pPacketContent,2000,0);
return NDIS_STATUS_NOT_ACCEPTED;
}
}
游客

返回顶部