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

1.1       misho       1: /* 
                      2:  * $smu-mark$ 
                      3:  * $name: libpcap_stuff.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 "hping2.h"
                     12: 
                     13: /* This is not be compiled if the target is linux without libpcap */
                     14: #if (!defined OSTYPE_LINUX) || (defined FORCE_LIBPCAP)
                     15: #include <stdio.h>
                     16: #include <string.h>
                     17: #include <stdlib.h>
                     18: #include <sys/ioctl.h>
                     19: #include <pcap.h>
                     20: #include <net/bpf.h>
                     21: 
                     22: #include "globals.h"
                     23: 
                     24: int open_pcap()
                     25: {
                     26:        int on;
                     27: 
                     28:        on = 1; /* no warning if BIOCIMMEDIATE will not be compiled */
                     29:        if (opt_debug)
                     30:                printf("DEBUG: pcap_open_live(%s, 99999, 0, 1, %p)\n",
                     31:                        ifname, errbuf);
                     32: 
                     33:        pcapfp = pcap_open_live(ifname, 99999, 0, 1, errbuf);
                     34:        if (pcapfp == NULL) {
                     35:                printf("[open_pcap] pcap_open_live: %s\n", errbuf);
                     36:                return -1;
                     37:        }
                     38: #if (!defined OSTYPE_LINUX) && (!defined __sun__)
                     39:        /* Return the packets to userspace as fast as possible */
                     40:        if (ioctl(pcap_fileno(pcapfp), BIOCIMMEDIATE, &on) == -1)
                     41:                perror("[open_pcap] ioctl(... BIOCIMMEDIATE ...)");
                     42: #endif
                     43:        return 0;
                     44: }
                     45: 
                     46: int close_pcap()
                     47: {
                     48:        pcap_close(pcapfp);
                     49:        return 0;
                     50: }
                     51: 
                     52: int pcap_recv(char *packet, unsigned int size)
                     53: {
                     54:         char *p = NULL;
                     55:         int pcapsize;
                     56: 
                     57:        if (opt_debug)
                     58:                printf("DEBUG: under pcap_recv()\n");
                     59: 
                     60:         while(p == NULL) {
                     61:                 p = (unsigned char*) pcap_next(pcapfp, &hdr);
                     62:                if (p == NULL && opt_debug)
                     63:                        printf("DEBUG: [pcap_recv] p = NULL\n");
                     64:        }
                     65: 
                     66:         pcapsize = hdr.caplen;
                     67: 
                     68:         if (pcapsize < size)
                     69:                 size = pcapsize;
                     70: 
                     71:         memcpy(packet, p, pcapsize);
                     72: 
                     73:         return pcapsize;
                     74: }
                     75: #endif /* ! OSTYPE_LINUX || FORCE_LIBPCAP */

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