阅读:3028回复:6
请教诸位大虾:中间层驱动程序开发中,如何得到收发包的上层协议标志信息,如是否为IP包?
不胜感激
|
|
最新喜欢:wingma... |
沙发#
发布于:2001-05-17 16:42
根据RFC 894 以太网包的第0x12,0x13为 08 00可以识别为IP包.
|
|
板凳#
发布于:2001-05-18 10:08
我也曾试过此方式,在protocol层经中间层驱动下传至底层时,可以使用查询以太头中标志,可是上传数据到哪里查??
|
|
地板#
发布于:2001-05-18 13:09
不论上传下传或收发包都可查询当你得到一个包的描述符指针Packet,就可利用函数
NdisGetFirstBufferFromPacket( IN PNDIS_PACKET Packet, OUT PNDIS_BUFFER *FirstBuffer, OUT PVOID *FirstBufferVA, OUT PUINT FirstBufferLength, OUT PUINT TotalBufferLength ); 从FirstBufferVA开始 14 个Byte就是以太网物理帧Frame头,格式为: 目的物理地址 源物理地址 帧格式 6 Bytes 6 Bytes 2 Bytes 其中,帧格式若是08 00(16进制),说明是IP数据包;若是08 06(16进制),说明是ARP数据包;若是80 35(16 进制),说明是RARP数据包 |
|
地下室#
发布于:2001-05-21 08:50
不错,在NDIS中间驱动中,从协议层接收到的包可以通过NdisGetFirstBuffer...等查询包的第一个缓冲区的第13、14个字节来确定协议的类型。
从下层收到的包则可以直接查询接收函数中的BufferHeader中的第13,14个字节。。。。。 |
|
5楼#
发布于:2001-05-29 01:56
其实以太包有三种格式:
0800是IP包 0806是ARP包 0835是RARP包 在IP包中,01是ICMP包,02是IGMP包,06是TCP包,17是UDP包, 可以用packet32作为中间层,获取网卡缓冲区数据, 你可以分析这些数据,自然会明白的, |
|
6楼#
发布于:2001-05-30 10:46
Tcp/ip详解一套书上有yaoshi说的那几种
顺便问一下,其他类型怎么知道,从哪能查到,介绍本书也行 [wlw 编辑于 2001-06-01 09:22] [wlw 编辑于 2001-06-03 12:19] |
|
|