[Help] libnids compilation Error

Source: Internet
Author: User
Tags domain server ftp protocol
[Help] libnids compilation error-Linux general technology-Linux programming and kernel information. The following is a detailed description. I use fedora 7. After libpcap libnet libnids is installed,
The following code compilation error is executed on the terminal
# Gcc-o ip. c-l nids-l pcap-l net

Error message:

Ip. c: 26: Error: expected ':', '}' or '_ attribute _ 'before'. 'token
Ip. c: In the 'ICMP _ protocol_packet_callback' function:
Ip. c: 108: Error: 'struct icmp_header 'does not have a member named 'ICMP _ sequence'
Ip. c: 109: Error: 'struct icmp_header 'does not have a member named 'hun'
Ip. c: 115: Error: 'struct icmp_header 'does not have a member named 'hun'
Ip. c: 116: Error: 'struct icmp_header 'does not have a member named 'ICMP _ sequence'
Ip. c: In the 'IP _ callback' function:
Ip. c: 313: Warning: transfer parameter 1 (which belongs to 'IP _ protocol_packet_callback') to convert between incompatible pointer types
Ip. c: In the 'main' function:
Ip. c: 322: Warning: The return type of 'main' is not 'int'


I am surprised that the hun variable is not displayed in the code, and the icmp_sequence variable is also included in the icmp_header structure defined at the beginning.
The other 26 lines are correct syntax, but the error prompt says there is a missing front:; and so on, let me feel helpless...

Help everyone !!


The ip. c code is as follows:
(This code can be downloaded and changed to ip. c .)
CODE: # include "nids. h"
# Include "pcap. h"
# Include "libnet. h"
/*
Bytes -----------------------------------------------------------------------------------------------------------------------
Data Structure of the UDP protocol header
Bytes -----------------------------------------------------------------------------------------------------------------------
*/
Struct udp_header
{
Unsigned short udp_source_port;
Unsigned short udp_destination_port;
Unsigned short udp_length;
Unsigned short udp_checksum;
};
/*
Bytes -----------------------------------------------------------------------------------------------------------------------
Data Structure of the ICMP protocol header
Bytes -----------------------------------------------------------------------------------------------------------------------
*/
Struct icmp_header
{
Unsigned int icmp_type;
Unsigned int icmp_code;
Unsigned char icmp_checksum;
Unsigned char icmp_id;
Unsigned char icmp_sequence;
};
/*
Bytes -----------------------------------------------------------------------------------------------------------------------
Data Structure of the IP protocol header
Bytes -----------------------------------------------------------------------------------------------------------------------
*/
Struct ip_header
{
# If defined (WORDS_BIGENDIAN)
Unsigned char ip_version: 4,/* version */
Ip_header_length: 4;/* Header Length */
# Else
Unsigned char ip_header_length: 4, ip_version: 4;
# Endif
Unsigned char ip_tos;/* service type */
Unsigned short ip_length;/* total length */
Unsigned short ip_id;/* ID */
Unsigned short ip_off;/* flag and offset */
Unsigned char ip_ttl;/* survival time */
Unsigned char ip_protocol;/* protocol type */
Unsigned short ip_checksum;/* checksum */
Struct in_addr ip_souce_address;/* Source IP Address */
Struct in_addr ip_destination_address;/* destination IP address */
};
/*
Bytes -----------------------------------------------------------------------------------------------------------------------
TCP protocol header
Bytes -----------------------------------------------------------------------------------------------------------------------
*/
Struct tcp_header
{
Unsigned char tcp_source_port;/* Source Port Number */
Unsigned char tcp_destination_port;/* destination port number */
Unsigned short tcp_sequence;/* learn the column Code */
Unsigned short tcp_acknowledgement;/* confirmation number */
# Ifdef WORDS_BIGENDIAN
Unsigned int tcp_offset: 4,/* Data offset */
Tcp_reserved: 4;/* Reserved */
# Else
Unsigned int tcp_reserved: 4,/* Reserved */
Tcp_offset: 4;/* Data offset */
# Endif
Unsigned int tcp_flags;/* flag */
Unsigned char tcp_windows;/* window size */
Unsigned char tcp_checksum;/* checksum */
Unsigned char tcp_urgent_pointer;/* Emergency pointer */
};
Char ascii_string [10000];
Char * char_to_ascii (char ch)
{
Char * string;
Ascii_string [0] = 0;
String = ascii_string;
If (isgraph (ch ))
* String ++ = ch;
Else if (ch = '')
* String ++ = ch;
Else if (ch = '\ n' | ch =' \ R ')
* String ++ = ch;
Else
* String ++ = '.';
* String = 0;
Return ascii_string;
}
/*
========================================================== ========================================================== ========================================================
The following describes the ICMP functions.
========================================================== ========================================================== ========================================================
*/
Void icmp_protocol_packet_callback (const u_char * packet_content)
{
Struct icmp_header * icmp_protocol;
Icmp_protocol = (struct icmp_header *) (packet_content + 14 + 20 );
Printf ("---------- ICMP protocol ---------- \ n ");
Printf ("ICMP Type: % d \ n", icmp_protocol-> icmp_type );
Switch (icmp_protocol-> icmp_type)/* ICMP type */
{
Case 8:
Printf ("ICMP Echo Request Protocol \ n ");
Printf ("ICMP code: % d \ n", icmp_protocol-> icmp_code );
Printf ("sequence code: % d \ n", icmp_protocol-> icmp_sequence );
Printf ("identifier: % d \ n", icmp_protocol-> icmp_id );

Break;
Case 0:
Printf ("ICMP echo response protocol \ n ");
Printf ("ICMP code: % d \ n", icmp_protocol-> icmp_code );
Printf ("identifier: % d \ n", icmp_protocol-> icmp_id );
Printf ("sequence code: % d \ n", icmp_protocol-> icmp_sequence );
Break;
Default:
Break;
}
Printf ("ICMP checksum: % d \ n", ntohs (icmp_protocol-> icmp_checksum);/* Get the checksum */
Return;
}
/*
========================================================== ========================================================== ========================================================
The following is a function for analyzing the TCP protocol.
========================================================== ========================================================== ========================================================
*/
Void tcp_protocol_packet_callback (const u_char * packet_content)
{
Struct tcp_header * tcp_protocol;
U_char flags;
Int header_length;
U_short source_port;
U_short destination_port;
U_short windows;
U_short urgent_pointer;
U_int sequence;
U_int acknowledgement;
Unsigned char checksum;
Tcp_protocol = (struct tcp_header *) (packet_content + 14 + 20 );
Source_port = ntohs (tcp_protocol-> tcp_source_port );
/* Obtain the source port number */
Destination_port = ntohs (tcp_protocol-> tcp_destination_port );
/* Obtain the destination port number */
Header_length = tcp_protocol-> tcp_offset * 4;
/* Obtain the header length */
Sequence = ntohl (tcp_protocol-> tcp_sequence );
/* Obtain the sequence code */
Acknowledgement = ntohl (tcp_protocol-> tcp_acknowledgement );
/* Get the confirmation number */
Windows = ntohs (tcp_protocol-> tcp_windows );
/* Obtain the window size */
Urgent_pointer = ntohs (tcp_protocol-> tcp_urgent_pointer );
/* Get the emergency pointer */
Flags = tcp_protocol-> tcp_flags;
Checksum = ntohs (tcp_protocol-> tcp_checksum );
Printf ("------- TCP protocol ------- \ n ");
Printf ("Source Port: % d \ n", source_port );
Printf ("Destination Port: % d \ n", destination_port );
Switch (destination_port)
{
Case 80:
Printf ("the upper layer protocol is HTTP \ n ");
Break;
Case 21:
Printf ("the upper-layer protocol is the FTP protocol \ n ");
Break;
Case 23:
Printf ("the upper-layer protocol is the TELNET protocol \ n ");
Break;
Case 25:
Printf ("the upper-layer protocol is SMTP protocol \ n ");
Break;
Case 110:
Printf ("POP3 protocol \ n ");
Break;
Default:
Break;
}
Printf ("sequence code: % u \ n", sequence );
Printf ("Confirmation Number: % u \ n", acknowledgement );
Printf ("Header Length: % d \ n", header_length );
Printf ("retain: % d \ n", tcp_protocol-> tcp_reserved );
Printf ("tag :");
If (flags & 0x08)
Printf ("PSH ");
If (flags & 0x10)
Printf ("ACK ");
If (flags & 0x02)
Printf ("SYN ");
If (flags & 0x20)
Printf ("URG ");
If (flags & 0x01)
Printf ("FIN ");
If (flags & 0x04)
Printf ("RST ");
Printf ("\ n ");
Printf ("window size: % d \ n", windows );
Printf ("checksum: % d \ n", checksum );
Printf ("Emergency pointer: % d \ n", urgent_pointer );
}
/*
========================================================== ========================================================== ========================================================
The following describes the UPD protocol functions.
========================================================== ========================================================== ========================================================
*/
Void udp_protocol_packet_callback (u_char * packet_content)
{
Struct udp_header * udp_protocol;
U_short source_port;
U_short destination_port;
U_short length;
Udp_protocol = (struct udp_header *) (packet_content + 20 );
Source_port = ntohs (udp_protocol-> udp_source_port );
/* Obtain the source port number */
Destination_port = ntohs (udp_protocol-> udp_destination_port );
/* Obtain the destination port number */
Length = ntohs (udp_protocol-> udp_length );
Printf ("---------- UDP protocol header ---------- \ n ");
Printf ("Source Port: % d \ n", source_port );
Printf ("Destination Port: % d \ n", destination_port );
Switch (destination_port)
{
Case 138:
Printf ("NETBIOS datainservice \ n ");
Break;
Case 137:
Printf ("NETBIOS Name Service \ n ");
Break;
Case 139:
Printf ("NETBIOS session service \ n ");
Break;
Case 53:
Printf ("name-domain server \ n ");
Break;
Default:
Break;
}
Printf ("length: % d \ n", length );
Printf ("checksum: % d \ n", ntohs (udp_protocol-> udp_checksum ));
}
/*
========================================================== ========================================================== ========================================================
The following is a function for analyzing the IP protocol.
========================================================== ========================================================== ========================================================
*/
Void ip_protocol_packet_callback (u_char * packet_content)
{
Struct ip_header * ip_protocol;
U_int header_length;
U_int offset;
U_char tos;
Unsigned short checksum;
Printf ("---------- IP protocol header ---------- \ n ");
Ip_protocol = (struct ip_header *) (packet_content );
Checksum = ntohs (ip_protocol-> ip_checksum );
/* Get the checksum */
Header_length = ip_protocol-> ip_header_length * 4;
/* Obtain the header length */
Tos = ip_protocol-> ip_tos;
Offset = ntohs (ip_protocol-> ip_off );
Printf ("IP version: % d \ n", ip_protocol-> ip_version );
Printf ("Header Length: % d \ n", header_length );
Printf ("TOS: % d \ n", tos );
Printf ("total length: % d \ n", ntohs (ip_protocol-> ip_length ));
Printf ("identifier: % d \ n", ntohs (ip_protocol-> ip_id ));
Printf ("offset: % d \ n", (offset & 0x1fff) * 8 );
Printf ("survival time: % d \ n", ip_protocol-> ip_ttl );
Printf ("Protocol: % d \ n", ip_protocol-> ip_protocol );
Switch (ip_protocol-> ip_protocol)/* determine the upper-layer protocol type */
{
Case 6:
Printf ("the upper layer protocol is TCP \ n ");
Break;
Case 17:
Printf ("UDP \ n ");
Break;
Case 1:
Printf ("the upper layer protocol is ICMP \ n ");
Break;
Default:
Break;
}
Printf ("checksum: % d \ n", checksum );
Printf ("Source IP Address: % s \ n", inet_ntoa (ip_protocol-> ip_souce_address ));
Printf ("Destination IP Address: % s \ n", inet_ntoa (ip_protocol-> ip_destination_address ));
Switch (ip_protocol-> ip_protocol)
{
Case 17:
Udp_protocol_packet_callback (packet_content );
Break;
/* When the upper-layer protocol is UDP, call the analysis function of UDP */
Case 6:
Tcp_protocol_packet_callback (packet_content );
Break;
/* When the upper-layer protocol is TCP, call and analyze the functions of TCP */
Case 1:
Icmp_protocol_packet_callback (packet_content );
Break;
/* When the upper-layer protocol is ICMP, call the function for analyzing ICMP */
Default:
Break;
}
}
/*
========================================================== ========================================================== ========================================================
The following is the callback function.
========================================================== ========================================================== ========================================================
*/
Void ip_callback (struct ip * a_packet, int len)
{
Ip_protocol_packet_callback (a_packet );
/* Call the function for analyzing the IP protocol */
}
/*
========================================================== ========================================================== ========================================================
Main Function
========================================================== ========================================================== ========================================================
*/
Void main ()
{
If (! Nids_init ())
/* Initialize Libnids */
{
Printf ("error: % s \ n", nids_errbuf );
Exit (1 );
}
Nids_register_ip_frag (ip_callback );
/* Register and analyze the callback function of the IP protocol */
Nids_run ();
/* Enter the cyclic packet capture status */
}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.