[英]dereferencing pointer to incomplete type with struct ip and also with struct iphdr
你好,我正在嘗試解析一些數據包,並且當使用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*)ðernet_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");
}
我知道程序中還有其他錯誤,但想在尋找其他問題之前先解決此問題。 謝謝
您的編譯單元必須包括struct ethhdr
和struct ip
的定義,以便您能夠訪問它們的成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.