Annotation of embedaddon/hping2/listen.c, revision 1.1.1.1

1.1       misho       1: /* 
                      2:  * $smu-mark$ 
                      3:  * $name: listen.c$ 
                      4:  * $author: Salvatore Sanfilippo <antirez@invece.org>$ 
                      5:  * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$ 
                      6:  * $license: This software is under GPL version 2 of license$ 
                      7:  * $date: Fri Nov  5 11:55:48 MET 1999$ 
                      8:  * $rev: 8$ 
                      9:  */ 
                     10: 
                     11: #include <stdlib.h>
                     12: #include <stdio.h>
                     13: #include <string.h>
                     14: #include <unistd.h>
                     15: #include <sys/types.h>
                     16: #include <sys/socket.h>
                     17: #include <netinet/in.h>
                     18: 
                     19: #include "hping2.h" /* hping2.h includes hcmp.h */
                     20: #include "globals.h"
                     21: 
                     22: void listenmain(void)
                     23: {
                     24:        int size, ip_size;
                     25:        int stdoutFD = fileno(stdout);
                     26:        char packet[IP_MAX_SIZE+linkhdr_size];
                     27:        char *p, *ip_packet;
                     28:        struct myiphdr ip;
                     29:        __u16 id;
                     30:        static __u16 exp_id; /* expected id */
                     31: 
                     32:        exp_id = 1;
                     33: 
                     34:        while(1) {
                     35:                size = read_packet(packet, IP_MAX_SIZE+linkhdr_size);
                     36:                switch(size) {
                     37:                case 0:
                     38:                        continue;
                     39:                case -1:
                     40:                        exit(1);
                     41:                }
                     42:        
                     43:                /* Skip truncated packets */
                     44:                if (size < linkhdr_size+IPHDR_SIZE)
                     45:                        continue;
                     46:                ip_packet = packet + linkhdr_size;
                     47: 
                     48:                /* copy the ip header so it will be aligned */
                     49:                memcpy(&ip, ip_packet, sizeof(ip));
                     50:                id = ntohs(ip.id);
                     51:                ip_size = ntohs(ip.tot_len);
                     52:                if (size-linkhdr_size > ip_size)
                     53:                        size = ip_size;
                     54:                else
                     55:                        size -= linkhdr_size;
                     56: 
                     57:                if ((p = memstr(ip_packet, sign, size))) {
                     58:                        if (opt_verbose)
                     59:                                fprintf(stderr, "packet %d received\n", id);
                     60: 
                     61:                        if (opt_safe) {
                     62:                                if (id == exp_id)
                     63:                                        exp_id++;
                     64:                                else {
                     65:                                        if (opt_verbose)
                     66:                                                fprintf(stderr, "packet not in sequence (id %d) received\n", id);
                     67:                                        send_hcmp(HCMP_RESTART, exp_id);
                     68:                                        if (opt_verbose)
                     69:                                                fprintf(stderr, "HCMP restart from %d sent\n", exp_id);
                     70:                                        continue; /* discard this packet */
                     71:                                }
                     72:                        }
                     73: 
                     74:                        p+=strlen(sign);
                     75:                        write(stdoutFD, p, size-(p-ip_packet));
                     76:                }
                     77:        }
                     78: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>