解析Sniffer数据包中的地址与端口

2009-03-09
继续昨天的FTP Sniffer的开发,现在要在嗅探到感兴趣的数据后,显示数据的来源和去向(源/目标地址及端口),地址以整数形式保存了在sniff_ip结构体里,而端口则在sniff_tcp结构体里,这些数据都以网络字节顺序(network byte order)保存,需要在使用前转换成本地字节顺序(host byte order),相关转换函数包含在arpa/inet.h和netinet/in.h两个头文件里,转换方法如下:

//输出源地址与端口
cout << "Src Addr : " << inet_ntoa ( ip->ip_src ) << endl;
cout << "Src Port : " << ntohs ( tcp->th_sport ) << endl;

//输出目标地址与端口
cout << "Dst Addr : " << inet_ntoa ( ip->ip_dst ) << endl;
cout << "Dst Port : " << ntohs ( tcp->th_dport ) << endl;


inet_ntoa函数将struct in_addr类型数据转换为点分式IP地址字符串,ntohs将一个16位无符号整数从网络字节顺序转换为本地字节顺序。具体函数定义可参见GNU C Library相关章节。

M-OSCAR | Powered by Blogger | Entries (RSS) | Comments (RSS) | Designed by MB Web Design | XML Coded By Cahayabiru.com