storybaby
驱动牛犊
驱动牛犊
  • 注册日期2006-08-12
  • 最后登录2009-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望19点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:1228回复:1

!!!!!求教NAT开发中的问题.附部分源码

楼主#
更多 发布于:2008-03-09 02:21
我利用Passthru开发NAT,需做的工作是简单转发数据.
第一步:在PtReceive中接收处理感兴趣的数据包,如只处理2000端口的数据包
第二步:将收到到的数据拷贝到指定缓冲区
第三步:修改IP头和MAC头,重算校验和
第四步:调用NdisSend接口转发数据
第五步:释放资源

结果是数据被成功转发到对应的机器上,但是数据没被应用层接收.我在一端采用UDP2000端口发包,通过PassThru转发发数据包,在另一端通过抓包软件得知修改后的数据已经被发送到目标机器.但是目标机器接收到信息后并没有交与我应用层的接收程序?
请问是什么原因呢?

附部分源码:
pMyIpHead = (PIP_HEADER)(pPacketMemory+14);
pMyUdpHead = (PUDP_HEAD)(pPacketMemory+14+20);

IP_Addr = pMyIpHead->IP_DA ;//= 0x0100a8c0 ;//192.168.0.1
pMyIpHead->IP_DA = pMyIpHead->IP_SA;
pMyIpHead->IP_SA = IP_Addr;

GenCheckSum((UCHAR*)(pPacketMemory+14));

CalculateChecksum((PVOID)(pPacketMemory+14), 1);

NdisAllocateBuffer(&Status, &PacketBuffer,
pAdapt->SendPacketPoolHandle, pPacketMemory, PacketLen);

if (Status!=NDIS_STATUS_SUCCESS)
{
NdisDprFreePacket(MyPacket);
NdisFreeMemory(pPacketMemory,PacketLen,0);
return Status;
}

SendRsvd = (PSEND_RSVD)(MyPacket->MiniportReserved);
SendRsvd->OriginalPkt = MyPacket;

NdisChainBufferAtFront(MyPacket, PacketBuffer);

NdisFreeMemory(pPacketMemory,PacketLen,0);

MyPacket->Private.Flags = NdisGetPacketFlags(Packet);
NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
NDIS_OOB_DATA_FROM_PACKET(Packet),
sizeof(NDIS_PACKET_OOB_DATA));

NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
&MediaSpecificInfo,
&MediaSpecificInfoSize);

if (MediaSpecificInfo || MediaSpecificInfoSize)
{
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
}

is_send=TRUE;
NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket);
if (Status != NDIS_STATUS_PENDING)
{
#ifndef WIN9X
NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
#endif
NdisUnchainBufferAtFront(MyPacket ,&PacketBuffer);
NdisFreePacket(MyPacket);
ADAPT_DECR_PENDING_SENDS(pAdapt);
//NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
// Packet,
// Status);
}

yellowzzp
驱动小牛
驱动小牛
  • 注册日期2007-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1015分
  • 威望131点
  • 贡献值0点
  • 好评度117点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-03-13 15:15
既然对放能收到,那肯定不是passthru发包的问题.应该和数据有关系吧.
你贴他包代码也没他大用.
游客

返回顶部