Logo Search packages:      
Sourcecode: airsnort version File versions  Download package

PacketSource.h

/*
    This file is part of AirSnort.

    AirSnort is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    AirSnort is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with AirSnort; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    Copyright (c) 2003, Snax
*/

#ifndef __PACKET_SOURCE_H
#define __PACKET_SOURCE_H

#include <stdio.h>
#include <stdlib.h>
#ifndef WIN32
#include <unistd.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/wireless.h>
#include <pcap.h>
#else
#include <windows.h>
#include <io.h>
#include "peek.h"
#endif

#include <signal.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>

#ifdef WIN32
/*
 * We will need some libpcap defines, which of course are:
 *
 * Copyright (c) 1993, 1994, 1995, 1996, 1997
 *      The Regents of the University of California.  All rights reserved.
 */

/*
 * The first record in the file contains saved values for some
 * of the flags used in the printout phases of tcpdump.
 * Many fields here are 32 bit ints so compilers won't insert unwanted
 * padding; these files need to be interchangeable across architectures.
 *
 * Do not change the layout of this structure, in any way (this includes
 * changes that only affect the length of fields in this structure).
 *
 * Also, do not change the interpretation of any of the members of this
 * structure, in any way (this includes using values other than
 * LINKTYPE_ values, as defined in "savefile.c", in the "linktype"
 * field).
 *
 * Instead:
 *
 *      introduce a new structure for the new format, if the layout
 *      of the structure changed;
 *
 *      send mail to "tcpdump-workers@tcpdump.org", requesting a new
 *      magic number for your new capture file format, and, when
 *      you get the new magic number, put it in "savefile.c";
 *
 *      use that magic number for save files with the changed file
 *      header;
 *
 *      make the code in "savefile.c" capable of reading files with
 *      the old file header as well as files with the new file header
 *      (using the magic number to determine the header format).
 *
 * Then supply the changes to "patches@tcpdump.org", so that future
 * versions of libpcap and programs that use it (such as tcpdump) will
 * be able to read your new capture file format.
 */
struct pcap_file_header {
        unsigned int magic;
        unsigned short version_major;
        unsigned short version_minor;
        int thiszone;     /* gmt to local correction */
        unsigned int sigfigs;    /* accuracy of timestamps */
        unsigned int snaplen;    /* max length saved portion of each pkt */
        unsigned int linktype;   /* data link type (LINKTYPE_*) */
};

/*
 * Each packet in the dump file is prepended with this generic header.
 * This gets around the problem of different headers for different
 * packet interfaces.
 */
struct pcap_pkthdr {
        struct timeval ts;      /* time stamp */
        unsigned int caplen;     /* length of portion present */
        unsigned int len;        /* length this packet (off wire) */
};

#define PCAP_ERRBUF_SIZE 256
/*
 * END OF LIBPCAP definitions
 */

//Windows specific definition

typedef struct PacketNode_t {
   struct pcap_pkthdr hdr;
   struct PacketNode_t *nxt;
   unsigned char pkt[0];
} PacketNode;

void initPktQueue();
void destroyPktQueue();
void queueRawPacket(PacketNode *node);
PacketNode *dequeueRawPacket();

#endif

#define PRISM 0
#define ORINOCO 1
#define OTHER 2

#ifndef DLT_EN10MB
#define DLT_EN10MB 1
#endif

#ifndef DLT_IEEE802_11
#define DLT_IEEE802_11 105
#endif

#ifndef DLT_PRISM_HEADER
#define DLT_PRISM_HEADER 119
#endif

#ifndef DLT_AIRONET_HEADER
#define DLT_AIRONET_HEADER 120
#endif

typedef struct {
   u_int dlType;
   int driverType;
   int dump; 
#ifndef WIN32
   pcap_t *pcap;
   pcap_dumper_t *dumpFile;
#else
   Context *ctx;
   HANDLE hAdapter;
   FILE *dumpfd; //fd for pcap dump file
   FILE *readfd; //fd for pcap dump file
   unsigned int snaplen;
   unsigned char pbuf[0];
#endif
} PacketSource;

#ifndef WIN32
#define WLAN_DEVNAMELEN_MAX 16
#else
#define WLAN_DEVNAMELEN_MAX 128
#endif

extern char dev[WLAN_DEVNAMELEN_MAX];

PacketSource *openPacketSource(char *dev, int snaplen, int promisc, int to_ms, char *errbuf,
                               int driverType, unsigned int chan);
void closePacketSource(PacketSource *src);
PacketSource *openOfflinePacketSource(const char *name, char *errbuf);
void openPacketDumpFile(PacketSource *src, char *name);
const unsigned char *nextPacket(PacketSource *src, struct pcap_pkthdr *hdr);
void dumpPacket(PacketSource *src, struct pcap_pkthdr *hdr, const unsigned char *pkt);

int startMonitor(int driverType);
int stopMonitor(int driverType);
int setChannel(int driverType, unsigned int channel);

#endif

Generated by  Doxygen 1.6.0   Back to index