阅读:1506回复:6
取得网卡的带有IP头的数据
怎样取得网卡的带有IP头的数据?我需要在WindowsXP下得到。得到后进行判断IP地址,然后根据地址进行转发(相当于做代理服务器)。有哪位大侠指教,不胜感激。给分。
|
|
最新喜欢:baoyib... |
沙发#
发布于:2003-06-09 10:25
把问题描述的详细点.
|
|
板凳#
发布于:2003-06-15 05:55
根据你的描述我猜想:你和我的需求相似,前一段时间,我花钱求购了一个可以自由修改封包内容的框架源代码,由自己写函数去组装封包并转发(当然可以改写IP),当然,为了对人家劳动的保护,代码是不能给的。但我建议你从Passthru的例子入手,实现你的目的不是很遥远!
|
|
地板#
发布于:2003-06-15 12:03
你只要从Packet里面得到ip头就好了。先用NdisGetFirstBufferFromPacket/NdisGetNextBuffer从Packet里面得到NDIS_BUFFER指针。然后再用NdisQueryBuffer从buffer里面得到实际的包的数据。以太网的数据包格式是:
EthernetHeader+IPHeader+xxx EthernetHeader为14字节,IPheader长度不定,一般20字节 xxx根据ip头部信息决定相应结构 [编辑 - 6/15/03 by dshadow79] |
|
地下室#
发布于:2003-06-16 15:55
call NdisGetFirstBufferFromPacketSafe instead of NdisGetFirstBufferFromPacket
|
|
|
5楼#
发布于:2003-06-16 17:38
why? safe只是在出错的时候产生个bugcheck,反正如果失败的话访问内存也会出错,也会bugcheck,有没有safe无所谓的
|
|
6楼#
发布于:2003-06-30 13:51
取得IP数据有以下几种可能(前提是你 收到的是TCP/IP包):
1。在ptreceive中当NDIGETPACKET==NULL时,并且packetsize<= lookaheadbuffersize时,所有的数据那么你要的IP数据就在 lookaheadbuffer中 2。ptreceive中,当NDIGETPACKET==NULL时,但packetsize>lookaheadbuffersize时,那么你要先tranferdata 然后把lookaheadbuffer中的内容和transferdata的内容组合起来 就是你要IP数据了 3。ptreceive中当NDISGETPACKET!=NULL,这种情况是因为系统 内存不足,这是得到的packet实际数据没上来,如果要修改数据 我想可能还有自己copydata。 4,ptreceivepacket中,这个数据是底层copy上来的,可以直接修改。 第3中情况可能不对,我也不太确定。 具体的数据在packet中位置是: packet->private.head的buffer描述符链表的systemva(这个拼写有误),具体记得不是很清楚。你自己看看就可以了 |
|
|