阅读:1746回复:4
在IP Filter Driver Hook 中怎么样得到端口号?
在IP Filter Driver Hook 中可以得到发送方和接收方的ip,
但是应该怎么样才能得到它们的端口号? |
|
|
沙发#
发布于:2002-11-13 13:05
你有我的例子吧?看
IfHookProc( unsigned char *PacketHeader, unsigned char *Packet, unsigned int PacketLength, unsigned int RecvInterfaceIndex, unsigned int SendInterfaceIndex, IPAddr RecvLinkNextHop, IPAddr SendLinkNextHop ); 第二个参数Packet就是IP的数据,根据DDK的说明,这部分不包括IP头,使用IPHeader * pHdr = ( IPHeader * )PacketHeader; 根据pHdr->iph_protocol,你可以知道这个包是个什么包,比方说吧,如果是TCP,那么你定义一个TCP头的结构TcpHead,用TcpHead * pTcp = ( TcpHead * )Packet;这样就可以得到端口了。 |
|
板凳#
发布于:2002-11-13 13:06
在IP Filter Driver Hook 中可以得到发送方和接收方的ip, 如果是tcp/udp协议,那么紧跟原目的ip后的就是双方的各两个字节的端口号! 嘿嘿。。。 给分! :o |
|
|
地板#
发布于:2002-11-13 23:37
我定义了一个TCP头的结构:
typedef struct tcp_hdr //定义TCP首部 { USHORT th_sport; //16位源端口 USHORT th_dport; //16位目的端口 unsigned int th_seq; //32位序列号 unsigned int th_ack; //32位确认号 unsigned char th_lenres; //4位首部长度/6位保留字 unsigned char th_flag; //6位标志位 USHORT th_win; //16位窗口大小 USHORT th_sum; //16位校验和 USHORT th_urp; //16位紧急数据偏移量 }TCPHEADER; //////在这里取源端口 if(pHdr->iph_protocol==6) { TCPHEADER * pTcp = ( TCPHEADER * )Packet; int tsport =pTcp->th_sport; } 不知为什么取源端口的值不对,应该怎么样改? |
|
|
地下室#
发布于:2002-11-14 10:21
不是要改,而是因为有一个网络字节顺序的问题。用htons转换一下,就可以看到你熟悉的端口了。
|
|