From eaecbed44924ece119c5b41db2828b4554f263d2 Mon Sep 17 00:00:00 2001 From: mjm Date: Tue, 12 Nov 2002 22:12:33 +0000 Subject: pre-alpha version, most things does not work yet. todo: communication protocol with GUI and implementation of sniffer --- (limited to 'noncore/net/wellenreiter/daemon/source/sniffer.hh') diff --git a/noncore/net/wellenreiter/daemon/source/sniffer.hh b/noncore/net/wellenreiter/daemon/source/sniffer.hh new file mode 100644 index 0000000..7f45be6 --- a/dev/null +++ b/noncore/net/wellenreiter/daemon/source/sniffer.hh @@ -0,0 +1,83 @@ +/* $Id$ */ + +#ifndef SNIFFER_HH +#define SNIFFER_HH + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_PATH "/proc/driver/aironet/%s/Config" +#define CARD_TYPE_CISCO 1 +#define CARD_TYPE_NG 2 +#define CARD_TYPE_HOSTAP 3 + +#define NONBROADCASTING "non-broadcasting" + +/* only for now, until we have the daemon running */ +/*the config file should provide these information */ +#define SNIFFER_DEVICE "wlan0" +#define CARD_TYPE CARD_TYPE_CISCO +#define SBIN_PATH "/sbin/ifconfig %s promisc up" +#define WLANCTL_PATH "/sbin/wlanctl-ng" + +/* holds all the interresting data */ +struct packetinfo +{ + int isvalid; + int pktlen; + int fctype; + int fcsubtype; + int fc_wep; + int cap_WEP; + int cap_IBSS; + int cap_ESS; + int channel; + char bssid[sizeof("00:00:00:00:00:00")]; + char desthwaddr[sizeof("00:00:00:00:00:00")]; + char sndhwaddr[sizeof("00:00:00:00:00:00")]; + char *ssid; + int ssid_len; +}; + + +/* Prototypes */ + +int sniffer(void); +int card_into_monitormode (char * device, int cardtype); +int card_set_promisc_up (char * device); +int start_sniffing (char * device); +void process_packets(u_char *useless,const struct pcap_pkthdr* pkthdr,const u_char* packet); +int decode_80211b_hdr(const u_char *p,struct packetinfo *ppinfo); +void etheraddr_string(register const u_char *ep,char * text); +int handle_beacon(u_int16_t fc, const u_char *p,struct packetinfo *ppinfo); + +static int GetHeaderLength(u_int16_t fc); + +/* + * True if "l" bytes of "var" were captured. + * + * The "snapend - (l) <= snapend" checks to make sure "l" isn't so large + * that "snapend - (l)" underflows. + * + * The check is for <= rather than < because "l" might be 0. + */ +#define TTEST2(var, l) (snapend - (l) <= snapend && \ + (const u_char *)&(var) <= snapend - (l)) + +/* True if "var" was captured */ +#define TTEST(var) TTEST2(var, sizeof(var)) + +/* Bail if "l" bytes of "var" were not captured */ +#define TCHECK2(var, l) if (!TTEST2(var, l)) goto trunc + +/* Bail if "var" was not captured */ +#define TCHECK(var) TCHECK2(var, sizeof(var)) + +#endif /* SNIFFER_HH */ -- cgit v0.9.0.2