不到100行的libpcap程序,获取源IP与目的IP完全相同,不知道为什么,请高手给看看,谢谢
我编写的libpcap程序,分析网络数据包,发现分析出来的源IP与目的IP完全相同,而实际上不是这样的。请高手指点,谢谢。 
 直接编译:gcc   test.c   -o   test      -lpcap 
 test.c源代码如下(也可以直接下载附件):   
 #include <stdio.h>  
 #include <stdlib.h>  
 #include <sys/types.h>  
 #include <sys/socket.h>  
 #include <netinet/in.h>  
 #include <arpa/inet.h>  
 #include <pcap.h>  
 #include <string.h>  
 #include <time.h>  
 #include <error.h>    
 struct   ether_header 
 { 
             unsigned   char   source[6]; 
             unsigned   char   dest[6]; 
             unsigned   int   type; 
 };   
 struct   ip_header 
 { 
 #ifdef   WORDS_BIGENDIAN 
             u_int8_t   ip_version:4, 
                         ip_header_length:4; 
 #else 
             u_int8_t   ip_header_length:4, 
                            ip_version:4; 
 #endif 
             u_int8_t   ip_tos;                  /*type   of   service   */ 
             u_int16_t   ip_length;            /*length   */ 
             u_int16_t   ip_id;            /*identity   */ 
             u_int16_t   ip_off;            /*   offset   */ 
             u_int8_t   ip_ttl;            /*time   to   live*/ 
             u_int8_t   ip_protocol;            /*   type   of   protocol*/ 
             u_int16_t   ip_chechsum;      /*   chechsum   */ 
             struct   in_addr   source; 
             struct   in_addr   dest; 
 };   
 void   packet_callback(unsigned   char*   argument,const   struct   pcap_pkthdr*   packet_header,   const   unsigned   char*   packet_content) 
 { 
             struct   ether_header*   eptr; 
             struct   ip_header*   iptr;   
             eptr=(struct   ether_header*)   packet_content; 
             switch(ntohs(eptr-> type)) 
             { 
                         case   0x0800   :/*IP*/ 
                                        iptr=(struct   ip_header*)(packet_content+14); 
                                        switch(iptr-> ip_protocol) 
                                        { 
                                                 case   6:   /*   TCP   */ 
                                                             printf( "%s   %s   \n ",   inet_ntoa(iptr-> source),inet_ntoa(iptr-> dest)); 
                             &nbs