2011-10-29 17 views
0

こんにちは私はいくつかのパケットを解析しようとしていますが、struct ipを使用しているときには "不完全な型への逆参照ポインタ"struct ipとstruct iphdrの不完全な型への参照を逆参照しています

PrintPacketInHex(char *mesg, unsigned char *p, int len){ 
printf(mesg); 
while(len--){ 
printf("%.2X ",*p); 
p++; 
} 
} 


/*parse the sniffed packets*/ 

ParseEthernetHeader(unsigned char *packet, int len){ 
struct ethhdr *ethernet_header; 
struct ip *ip_header; 
//+sizeof(struct iphdr) 
if(len> sizeof(struct ethhdr)){ 
ethernet_header = (struct ethhdr*) packet; 
packet = packet +16; 
ip_header = (struct ip*) packet; 

/* first set of 6 bytes are destination MAC*/ 

PrintPacketInHex("destination MAC : ", ethernet_header->h_dest,6); 
printf("\n"); 

/*scond set of 6 bytes are source MAC */ 

PrintPacketInHex("source MAC : ", ethernet_header->h_source,6); 
printf("\n"); 

/*last 2 bytes in ethernet header are the protocol in carries */ 

PrintPacketInHex("protocol: ", (void*)&ethernet_header->h_proto,2); 
printf("\n"); 

/*the next 4 bytes are ip version bytes */ 

PrintPacketInHex("ip version: ", ip_header->ip_v,4); 
printf("\n"); 

/*the next 4 bytes are internet header length */ 

PrintPacketInHex("internet header length: ", ip_header->ip_ihl,4); 
printf("\n"); 

/*the next 8 bytes are type of srvice bytes */ 

PrintPacketInHex("type of service: ", ip_header->ip_tos,8); 
printf("\n"); 

/*the next 8 bytes are total length bytes */ 

PrintPacketInHex("total length: ", ip_header->ip_len,16); 
printf("\n"); 

/*the next 8 bytes are identification bytes */ 

PrintPacketInHex("identification: ", ip_header->ip_id,16); 
printf("\n"); 

/*the next 8 bytes are flags bytes 

PrintPacketInHex("Flags: ", "flags",3); 
printf("\n");*/ 

/*the next 13 bytes flags and offset bytes */ 

PrintPacketInHex("offset: ", ip_header->ip_off,16); 
printf("\n"); 

/*the next 8 bytes time to live bytes */ 
PrintPacketInHex("time to live: ", ip_header->ip_ttl,8); 
printf("\n"); 

/*the next 8 bytes protocol bytes */ 

PrintPacketInHex("protocol: ", ip_header->ip_p,8); 
printf("\n"); 

/*the next 16 bytes are checksum bytes */ 

PrintPacketInHex("checksum: ", ip_header->ip_sum,16); 
printf("\n"); 

/*the next 32 bytes source ip adress bytes */ 

PrintPacketInHex("source ip: ", ip_header->ip_src,32); 
printf("\n"); 

/*the next 32 bytes destination ip adress bytes */ 

PrintPacketInHex("destination ip: ", ip_header->dip_dst,32); 
printf("\n"); 
} 
else printf("packet size too small ! \n"); 
} 

私は他のエラーがプログラムであることを知っているが、これを解決したい: は私がパケットを解析するために使用している機能ですので、私は、構造体iphdrで、次にしようと試みたが、まだここで同じ問題 を持っています他の問題を探す前に問題 ありがとう

+0

サンプルデータを提供できますか? – Aif

+0

構造体 'ip'を定義するヘッダファイルをインクルードしましたか? –

+0

'struct ip'はどこに定義されていますか? – Mat

答えて

1

コンパイルユニットには、メンバーにアクセスできるように、struct ethhdrstruct ipの定義が含まれている必要があります。

+0

ありがとう、それは私の愚かな間違いだった:D、私はnetinet.hを含めるのを忘れてしまった –

関連する問題