Changeset 7d86ee2


Ignore:
Timestamp:
11/07/18 11:34:25 (2 years ago)
Author:
Jacob Van Walraven <jcv9@…>
Branches:
develop
Children:
93f4c64
Parents:
774b237
Message:

Added some error checking

File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/tutorial/ipdist.c

    r774b237 r7d86ee2  
    3333        /* Commands that need to be sent to gnuplot */
    3434        char *commands[] = {"set term png size 1280,960",
     35                            "set title 'IP Distrubtion'",
    3536                            "set xrange [0:255]",
     37                            "set xlabel 'Prefix'",
     38                            "set ylabel 'Hits'",
    3639                            "set xtics 0,10,255",
    3740                            "set output 'ipdist.png'",
     
    4144        FILE *gnuplot = popen("gnuplot -persistent", "w");
    4245        /* send all commands to gnuplot */
    43         for(i=0;i<6;i++) {
     46        for(i=0;i<9;i++) {
    4447                fprintf(gnuplot, "%s \n", commands[i]);
    4548        }
     
    7881                uint32_t address = htonl(ip4.s_addr);
    7982
    80                 /* Check if the address is part of an excluded network.
    81                    This is performed before splitting the into octets so if performed over entire address. */
     83                /* Check if the address is part of an excluded network. */
    8284                if(network_excluded(address) == 0) {
    8385
     
    8991                        octet[3] = (address & 0x000000ff);
    9092
    91                         /* check if the supplied address was a source or destination, increment
    92                            the correct one */
     93                        /* check if the supplied address was a source or destination,
     94                           increment the correct one */
    9395                        if(srcaddr) {
    9496                                srcaddrcount[octet[0]]++;
     
    9799                        }
    98100                }
    99 
    100101        }
    101102}
     
    118119                process_ip(address, 0);
    119120        }
    120 
     121}
     122
     123static void libtrace_cleanup(libtrace_t *trace, libtrace_packet_t *packet) {
     124        /* Only destroy trace and packet if they are not NULL */
     125        if(trace) {
     126                trace_destroy(trace);
     127        }
     128        if(packet) {
     129                trace_destroy_packet(packet);
     130        }
    121131}
    122132
     
    128138        /* Ensure the input URI was supplied */
    129139        if(argc < 2) {
    130                 fprintf(stderr, "Usage: %s inputURI\n", argv[0]);
     140                fprintf(stderr, "Usage: %s inputURI [excluded networks]\n", argv[0]);
     141                fprintf(stderr, "       eg. ./ipdist input.erf 210.10.3.0/24 70.5.0.0/16\n");
    131142                return 1;
    132143        }
     
    149160        char delim[] = "/";
    150161        // Convert supplied address and mask to a exclude_network structure
    151         for(i=2;i<argc;i++) {
    152                 char *address = strtok(argv[i], delim);
     162        for(i=0;i<argc-2;i++) {
     163                char *address = strtok(argv[i+2], delim);
    153164                char *mask = strtok(NULL, delim);
    154165
     166                /* Check the subnet mask is valid */
     167                if(atoi(mask) == 0 || atoi(mask) > 32 || atoi(mask) < 0) {
     168                        fprintf(stderr, "Invalid subnet mask: %s\n", mask);
     169                        return 1;
     170                }
    155171                /* right shift so netmask is in network byte order */
    156                 exclude[i-2].mask = 0xffffffff << (32 - atoi(mask));
     172                exclude[i].mask = 0xffffffff << (32 - atoi(mask));
    157173
    158174                struct in_addr addr;
    159                 /* Convert address string into uint32_t */
    160                 inet_aton(address, &addr);
     175                /* Convert address string into uint32_t and check its valid*/
     176                if(inet_aton(address, &addr) == 0) {
     177                        fprintf(stderr, "Invalid exclude address: %s\n", address);
     178                        return 1;
     179                }
    161180                /* Ensure its saved in network byte order */
    162                 exclude[i-2].address = htonl(addr.s_addr);
     181                exclude[i].address = htonl(addr.s_addr);
    163182
    164183                /* Calculate the network address */
    165                 exclude[i-2].network = exclude[i-2].address & exclude[i-2].mask;
     184                exclude[i].network = exclude[i].address & exclude[i].mask;
    166185        }
    167186
    168187        /* Create the packet structure */
    169188        packet = trace_create_packet();
     189        /* Ensure no error has occured creating the packet */
     190        if(packet == NULL) {
     191                perror("Creating libtrace packet");
     192                libtrace_cleanup(trace, packet);
     193                return 1;
     194        }
    170195
    171196        /* Create the trace */
    172197        trace = trace_create(argv[1]);
    173 
    174198        /* Ensure no error has occured creating the trace */
    175199        if(trace_is_err(trace)) {
    176200                trace_perror(trace, "Opening trace file");
     201                libtrace_cleanup(trace, packet);
    177202                return 1;
    178203        }
     
    181206        if(trace_start(trace) == -1) {
    182207                trace_perror(trace, "Starting trace");
    183                 trace_destroy(trace);
     208                libtrace_cleanup(trace, packet);
    184209                return 1;
    185210        }
     
    194219        if(trace_is_err(trace)) {
    195220                trace_perror(trace, packet);
     221                libtrace_cleanup(trace, packet);
    196222                return 1;
    197223        }
     
    203229        plot_results();
    204230
    205         trace_destroy(trace);
    206         trace_destroy_packet(packet);
    207         //libtrace_cleanup(trace, packet);
     231        /* cleanup */
     232        libtrace_cleanup(trace, packet);
     233
    208234        return 0;
    209235}
Note: See TracChangeset for help on using the changeset viewer.