From e8c9679812c25ff8942cc20566e2d38a9401f606 Mon Sep 17 00:00:00 2001 From: Nicolas Thill Date: Mon, 24 Jul 2006 07:07:41 +0000 Subject: [PATCH] port kismet to buildroot-ng SVN-Revision: 4245 --- net/kismet/Config.in | 66 + net/kismet/Makefile | 156 + net/kismet/files/ap_manuf | 79 + net/kismet/files/client_manuf | 249 ++ net/kismet/files/kismet.conf | 281 ++ net/kismet/files/kismet_drone.conf | 121 + net/kismet/files/kismet_ui.conf | 61 + net/kismet/patches/100-wrt54g_source.patch | 189 ++ net/kismet/patches/110-uclibc++_fixes.patch | 11 + net/kismet/patches/120-cleanup.patch | 3287 +++++++++++++++++++ 10 files changed, 4500 insertions(+) create mode 100644 net/kismet/Config.in create mode 100644 net/kismet/Makefile create mode 100644 net/kismet/files/ap_manuf create mode 100644 net/kismet/files/client_manuf create mode 100644 net/kismet/files/kismet.conf create mode 100644 net/kismet/files/kismet_drone.conf create mode 100644 net/kismet/files/kismet_ui.conf create mode 100644 net/kismet/patches/100-wrt54g_source.patch create mode 100644 net/kismet/patches/110-uclibc++_fixes.patch create mode 100644 net/kismet/patches/120-cleanup.patch diff --git a/net/kismet/Config.in b/net/kismet/Config.in new file mode 100644 index 000000000..425ec6c51 --- /dev/null +++ b/net/kismet/Config.in @@ -0,0 +1,66 @@ +#menu "kismet............................ An 802.11 layer2 wireless network detector, sniffer, and intrusion detection system" + +config BR2_COMPILE_KISMET + tristate + default n + depends BR2_PACKAGE_KISMET_CLIENT || BR2_PACKAGE_KISMET_DRONE || BR2_PACKAGE_KISMET_SERVER + +config BR2_PACKAGE_KISMET_CLIENT + prompt "kismet-client..................... The Kismet client" + tristate + default m if CONFIG_DEVEL + select BR2_COMPILE_KISMET + select BR2_PACKAGE_LIBNCURSES + select BR2_PACKAGE_UCLIBCXX + help + + An 802.11 layer2 wireless network detector, sniffer, and intrusion detection system. + + http://www.kismetwireless.net/ + + This package contains the kismet text interface client. + + Depends: + - libncurses + - libpcap + - uClibc++ + +config BR2_PACKAGE_KISMET_DRONE + prompt "kismet-drone...................... The Kismet drone" + tristate + default m if CONFIG_DEVEL + select BR2_COMPILE_KISMET + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_UCLIBCXX + help + + An 802.11 layer2 wireless network detector, sniffer, and intrusion detection system. + + http://www.kismetwireless.net/ + + This package contains the kismet remote sniffing.and monitoring drone. + + Depends: + - libpcap + - uClibc++ + +config BR2_PACKAGE_KISMET_SERVER + prompt "kismet-server..................... The Kismet server" + tristate + default m if CONFIG_DEVEL + select BR2_COMPILE_KISMET + select BR2_PACKAGE_LIBPCAP + select BR2_PACKAGE_UCLIBCXX + help + + An 802.11 layer2 wireless network detector, sniffer, and intrusion detection system. + + http://www.kismetwireless.net/ + + This package contains the kismet server. + + Depends: + - libpcap + - uClibc++ + +#endmenu diff --git a/net/kismet/Makefile b/net/kismet/Makefile new file mode 100644 index 000000000..72bc49917 --- /dev/null +++ b/net/kismet/Makefile @@ -0,0 +1,156 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id$ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=kismet +PKG_VERSION:=2006-04-R1 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=http://www.kismetwireless.net/code +PKG_MD5SUM:=8ec2de513f2911df1b7edfcba5ad1c26 +PKG_CAT:=zcat + +PKG_BUILDDEP:=libpcap ncurses uclibc++ + +include $(INCLUDE_DIR)/package.mk + +define Package/kismet-client + SECTION:=net + CATEGORY:=Network + TITLE:=Kismet client + DEPENDS:=+libncurses +uclibc++ + DESCRIPTION:=Kismet client.\\\ + An 802.11 layer2 wireless network detector, sniffer, and intrusion \\\ + detection system.\\\ + \\\ + This package contains the kismet text interface client. + URL:=http://www.kismetwireless.net/ +endef + +define Package/kismet-client/conffiles +/etc/kismet/ap_manuf +/etc/kismet/client_manuf +/etc/kismet/kismet.conf +/etc/kismet/kismet_ui.conf +endef + +define Package/kismet-drone + SECTION:=net + CATEGORY:=Network + DEPENDS:=+libpcap +uclibc++ + TITLE:=Kismet drone + DESCRIPTION:=Kismet drone.\\\ + An 802.11 layer2 wireless network detector, sniffer, and intrusion \\\ + detection system.\\\ + \\\ + This package contains the kismet remote sniffing.and monitoring drone. + URL:=http://www.kismetwireless.net/ +endef + +define Package/kismet-drone/conffiles +/etc/kismet/kismet_drone.conf +endef + +define Package/kismet-server + SECTION:=net + CATEGORY:=Network + DEPENDS:=+libpcap +uclibc++ + TITLE:=Kismet server + DESCRIPTION:=Kismet server.\\\ + An 802.11 layer2 wireless network detector, sniffer, and intrusion \\\ + detection system.\\\ + \\\ + This package contains the kismet server. + URL:=http://www.kismetwireless.net/ +endef + +define Package/kismet-server/conffiles +/etc/kismet/ap_manuf +/etc/kismet/client_manuf +/etc/kismet/kismet.conf +endef + +define Build/Configure + (cd $(PKG_BUILD_DIR); rm -rf config.cache; \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS)" \ + CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -fno-rtti -nostdinc++" \ + CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -I$(LINUX_DIR)/include" \ + LDFLAGS="-nodefaultlibs -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \ + LIBS="-luClibc++ -lc -lm -lgcc" \ + ./configure \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --program-prefix="" \ + --program-suffix="" \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --infodir=/usr/share/info \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --localstatedir=/var \ + --mandir=/usr/share/man \ + --sbindir=/usr/sbin \ + --sysconfdir=/etc/kismet \ + $(DISABLE_LARGEFILE) \ + $(DISABLE_NLS) \ + --enable-syspcap=yes \ + --disable-setuid \ + --disable-wsp100 \ + --disable-gpsmap \ + ); +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + LIBS="-luClibc++ -lc -lm -lgcc" \ + all +endef + +#FIXME: remove this package? +define Package/kismet/install + install -d -m0755 $(1)/usr/bin/ + install -m0755 $(PKG_BUILD_DIR)/scripts/kismet $(1)/usr/bin/kismet +endef + +define Package/kismet-client/install + install -d -m0755 $(1)/etc/kismet/ + install -m0644 ./files/ap_manuf $(1)/etc/kismet/ + install -m0644 ./files/client_manuf $(1)/etc/kismet/ + install -m0644 ./files/kismet.conf $(1)/etc/kismet/ + install -m0644 ./files/kismet_ui.conf $(1)/etc/kismet/ + install -d -m0755 $(1)/usr/bin + install -m0755 $(PKG_BUILD_DIR)/kismet_client $(1)/usr/bin/ +endef + +define Package/kismet-drone/install + install -d -m0755 $(1)/etc/kismet/ + install -m0644 ./files/kismet_drone.conf $(1)/etc/kismet/ + install -d -m0755 $(1)/usr/bin + install -m0755 $(PKG_BUILD_DIR)/kismet_drone $(1)/usr/bin/ +endef + +define Package/kismet-server/install + install -d -m0755 $(1)/etc/kismet/ + install -m0644 ./files/ap_manuf $(1)/etc/kismet/ + install -m0644 ./files/client_manuf $(1)/etc/kismet/ + install -m0644 ./files/kismet.conf $(1)/etc/kismet/ + install -d -m0755 $(1)/usr/bin + install -m0755 $(PKG_BUILD_DIR)/kismet_server $(1)/usr/bin/ +endef + +$(eval $(call BuildPackage,kismet-client)) +$(eval $(call BuildPackage,kismet-drone)) +$(eval $(call BuildPackage,kismet-server)) diff --git a/net/kismet/files/ap_manuf b/net/kismet/files/ap_manuf new file mode 100644 index 000000000..7561b6d5b --- /dev/null +++ b/net/kismet/files/ap_manuf @@ -0,0 +1,79 @@ +00:01:03:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:01:24:00:00:00/FF:FF:FF:00:00:00 SMC Unknown default 6 192.168.2.1 +00:01:24:24:00:00/FF:FF:FF:FF:00:00 SMC SMC7004AWBR default 6 192.168.2.1 +00:02:2D:00:00:00/FF:FF:FF:00:00:00 Lucent Unknown 0 +00:02:6F:00:00:00/FF:FF:FF:00:00:00 Senao Unknown 0 +00:02:A5:00:00:00/FF:FF:FF:00:00:00 Compaq Unknown 0 +00:03:2F:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown 0 +00:04:3A:3A:00:00/FF:FF:FF:FF:00:00 Avaya ad-01444 0 +00:04:5A:0E:00:00/FF:FF:FF:FF:00:00 Linksys WAP11 linksys 6 192.168.1.1 +00:04:5A:5A:00:00/FF:FF:FF:FF:00:00 Linksys BEFW11S4 linksys 6 192.168.1.1 +00:04:5A:2E:00:00/FF:FF:FF:FF:00:00 Linksys BEFW11S4 linksys 6 192.168.1.1 +00:04:5A:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown linksys 6 192.168.1.1 +00:04:75:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:04:75:75:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE20096A AP2000 Version 1 3Com 0 169.254.0.1 +00:04:E2:00:00:00/FF:FF:FF:00:00:00 SMC Unknown 0 +00:04:E2:E2:00:00/FF:FF:FF:FF:00:00 SMC 7004AWBR default 6 192.168.2.1 +00:05:5D:00:00:00/FF:FF:FF:00:00:00 D-Link Unknown default 6 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-1000AP default 6 +00:06:25:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown linksys 6 192.168.1.1 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys BEFW11S4 v2 linksys 6 192.168.1.1 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WET11 linksys 6 192.168.1.225 +00:07:0E:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:07:50:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:08:21:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:09:43:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:09:5B:00:00:00/FF:FF:FF:00:00:00 Netgear Unknown 0 +00:09:7C:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:09:92:92:00:00/FF:FF:FF:FF:00:00 Sweex LC000010 wireless 11 192.168.0.1 +00:09:E8:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:0A:41:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:0A:8A:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:0A:8A:8A:00:00/FF:FF:FF:FF:00:00 Cisco AIR-AP1200 0 +00:30:65:00:00:00/FF:FF:FF:00:00:00 Apple Unknown 0 +00:30:65:65:00:00/FF:FF:FF:FF:00:00 Apple Snow Base Station 1 +00:30:AB:00:00:00/FF:FF:FF:00:00:00 Netgear Unknown 0 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MR314NA Wireless 1 192.168.0.1 +00:30:BD:00:00:00/FF:FF:FF:00:00:00 Belkin Unknown 0 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6230-3 0 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DI-614+ default 6 192.168.0.1 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DWL-900AP+ default 6 192.168.0.50 +00:40:26:00:00:00/FF:FF:FF:00:00:00 Buffalo Unknown 0 +00:40:26:26:00:00/FF:FF:FF:FF:00:00 Buffalo WLAR-L11G-L 0 +00:40:96:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown tsunami 6 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-AP342E2R tsunami 6 192.168.1.1 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AP-350 tsunami 7 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco Aironet 350 tsunami 6 +00:50:08:00:00:00/FF:FF:FF:00:00:00 Compaq Unknown 0 +00:50:8B:8B:00:00/FF:FF:FF:FF:00:00 Compaq WL400 - ETSI region compaq 11 +00:50:DA:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:50:DA:DA:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE747A 0 +00:50:F2:F2:00:00/FF:FF:FF:FF:00:00 Microsoft MN-500 MSHOME 6 192.168.0.1 +00:60:01:00:00:00/FF:FF:FF:00:00:00 Lucent Unknown 0 +00:60:1D:00:00:00/FF:FF:FF:00:00:00 Orinoco Unknown 0 +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Orinoco RG1000 0 +00:60:6D:00:00:00/FF:FF:FF:00:00:00 Cabletron Unknown 0 +00:60:B3:00:00:00/FF:FF:FF:00:00:00 Proxim Unknown 0 +00:80:37:37:00:00/FF:FF:FF:FF:00:00 Ericsson A11 (AP-4121-105M-ER-EU) 0 +00:80:C6:00:00:00/FF:FF:FF:00:00:00 SOHOware Unknown +00:80:C6:C6:00:00/FF:FF:FF:FF:00:00 SOHOware NetBlaster II +00:90:4B:4B:00:00/FF:FF:FF:FF:00:00 Linksys BEFW11S4 linksys 6 192.168.1.1 +00:90:D1:00:00:00/FF:FF:FF:00:00:00 SMC Unknown WLAN 11 +00:90:D1:D1:00:00/FF:FF:FF:FF:00:00 SMC SMC2652W WLAN 11 +00:90:D1:D1:00:00/FF:FF:FF:FF:00:00 SMC SMC2682W BRIDGE 11 +00:A0:04:00:00:00/FF:FF:FF:00:00:00 3Com Unknown +00:A0:04:04:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE51196 +00:A0:F8:00:00:00/FF:FF:FF:00:00:00 Symbol Unknown +00:E0:29:00:00:00/FF:FF:FF:00:00:00 OEM Unknown +08:00:46:00:00:00/FF:FF:FF:00:00:00 Sony Unknown +00:50:F2:00:00:00/FF:FF:FF:00:00:00 Microsoft Unknown MSHOME 6 192.168.2.1 +00:09:5B:00:00:00/FF:FF:FF:00:00:00 Netgear Unknwon NETGEAR 11 192.168.0.1 +00:30:BD:00:00:00/FF:FF:FF:00:00:00 Belkin Unknown WLAN 11 0.0.0.0 +00:09:5B:00:00:00/FF:FF:FF:00:00:00 Netgear Unknown Wireless 11 192.168.0.2 +00:30:BD:00:00:00/FF:FF:FF:00:00:00 Belkin Unknown belkin54g 11 0.0.0.0 +00:0D:88:00:00:00/FF:FF:FF:00:00:00 D-Link Unknown default 6 192.168.0.1 +00:80:C8:00:00:00/FF:FF:FF:00:00:00 D-Link Unknown default 6 192.168.0.1 +00:40:05:00:00:00/FF:FF:FF:00:00:00 ANI Unknown default 6 192.168.0.1 +00:0C:41:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown linksys 6 192.168.1.1 +00:04:E2:00:00:00/FF:FF:FF:00:00:00 SMC Unknown SMC 6 192.168.2.1 +00:06:25:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown linksys-g 6 192.168.1.1 diff --git a/net/kismet/files/client_manuf b/net/kismet/files/client_manuf new file mode 100644 index 000000000..b1c5ef425 --- /dev/null +++ b/net/kismet/files/client_manuf @@ -0,0 +1,249 @@ +00:00:22:22:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Silver 0 +00:00:8F:8F:00:00/FF:FF:FF:FF:00:00 BreezeCOM Breezenet Pro SA-PC 0 +00:01:03:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:01:03:03:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE62092A +00:01:03:03:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE777A 0 +00:01:24:00:00:00/FF:FF:FF:00:00:00 SMC Unknown default 6 192.168.2.1 +00:01:F4:F4:00:00/FF:FF:FF:FF:00:00 Entrasys CSIBD-AB-S Roamabout 0 +00:02:2D:00:00:00/FF:FF:FF:00:00:00 Lucent Unknown 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Agere Orinoco Gold +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Agere PC24E-H-FC 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Avaya PC24E-H-ET +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Avaya PC24E-H-FC 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Avaya World Card Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Buffalo WLI-PCM-L11 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Buffalo WLI-PCM-L11 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Buffalo WLI-PCM-L11GP 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Dell TrueMobile 1150 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Dell TrueMobile 1150 Mini-PCI 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Dell Truemobile 1150 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Dell true mobile 1150 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Gold +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent PC24E-H-FC 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent PC24E-H-FC 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent PC24E-H-FC 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN Silver 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN Silver (PC24E-H-FC) 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN-Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN/IEEE Version 01.01 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco MiniPCI Card (embedded in Sony Laptop) 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Orinoco Gold wireless 3 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Orinoco Gold +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Orinoco Mini PCI Card 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco PC Card T2 Extended ORiNOCO Europe 128RC4 Kit Gold 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco PC24E-H-ET +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco PC24E-H-FC 0 +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Silver +00:02:2D:2D:00:00/FF:FF:FF:FF:00:00 Orinoco Silver +00:02:6F:00:00:00/FF:FF:FF:00:00:00 Senao Unknown 0 +00:02:6F:6F:00:00/FF:FF:FF:FF:00:00 Senao SL-2011 CD +00:02:6F:6F:00:00/FF:FF:FF:FF:00:00 Senao SL-2011CD 0 +00:02:6F:6F:00:00/FF:FF:FF:FF:00:00 Senao SL-2011CD +00:02:6F:6F:00:00/FF:FF:FF:FF:00:00 Senao SL-2511CD PLUS EXT2(F200) 0 +00:02:A5:00:00:00/FF:FF:FF:00:00:00 Compaq Unknown 0 +00:02:A5:A5:00:00/FF:FF:FF:FF:00:00 Compaq WL110 +00:02:A5:A5:00:00/FF:FF:FF:FF:00:00 Compaq WL110 REV.0A 0 +00:02:B3:B3:00:00/FF:FF:FF:FF:00:00 Intel WPC-2011BWW 0 +00:03:2F:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown 0 +00:03:2F:2F:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 0 +00:03:2F:2F:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 +00:03:2F:2F:00:00/FF:FF:FF:FF:00:00 Repotec GL241101 +00:04:5A:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown 0 +00:04:5A:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown Linksys 6 192.168.1.1 +00:04:5A:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown linksys 6 192.168.1.1 +00:04:5A:5A:00:00/FF:FF:FF:FF:00:00 Linksys BEFW11S4 linksys 0 +00:04:5A:5A:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 +00:04:5A:5A:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 +00:04:5A:5A:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 +00:04:5A:5A:00:00/FF:FF:FF:FF:00:00 Linksys WUSB11 +00:04:75:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:04:75:75:00:00/FF:FF:FF:FF:00:00 3Com 3CRSHPW696 0 +00:04:75:75:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE62092B 0 +00:04:75:75:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE62092B +00:04:DB:DB:00:00/FF:FF:FF:FF:00:00 Tellus TWL-C11 0 +00:04:E2:00:00:00/FF:FF:FF:00:00:00 SMC Unknown 0 +00:04:E2:E2:00:00/FF:FF:FF:FF:00:00 SMC SMC2632W 0 +00:04:E2:E2:00:00/FF:FF:FF:FF:00:00 SMC SMC2632W +00:04:E2:E2:00:00/FF:FF:FF:FF:00:00 SMC SMC2632W +00:04:E2:E2:00:00/FF:FF:FF:FF:00:00 SMC SMC2632W +00:04:E2:E2:00:00/FF:FF:FF:FF:00:00 SMC SMC2632W +00:05:3C:3C:00:00/FF:FF:FF:FF:00:00 Intel Intel MiniPCI High Rate Wireless (ISL3874A) 0 +00:05:5D:00:00:00/FF:FF:FF:00:00:00 D-Link Unknown 0 +00:05:5D:00:00:00/FF:FF:FF:00:00:00 D-Link Unknown default 6 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 Compaq HNW-100 0 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DCF-650W +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 0 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 0 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 0 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650H +00:05:5D:5D:00:00/FF:FF:FF:FF:00:00 D-Link DWL-660 H/W:A1 F/W:4.04 0 +00:06:25:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown 0 +00:06:25:00:00:00/FF:FF:FF:00:00:00 Linksys Unknown linksys 6 192.168.1.1 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 D-Link DCF-650W +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Dell True Mobile 1150 6 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys BEFW11S4 v2 linksys 6 192.168.1.1 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WCF11 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WCF11 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WCF12 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WCF12 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WCF12 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WMP11 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WMP11 v2.5 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 V.3 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v2.5 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v2.5 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 v3.0 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WPC11 ver.3 (FCC-ID: PKW-WPC11-V31[suggests V3.1]) 0 +00:06:25:25:00:00/FF:FF:FF:FF:00:00 Linksys WUSB11 v2.6 0 +00:07:0E:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:07:0E:0E:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:07:0E:0E:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:07:50:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:07:50:50:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:07:50:50:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM350 0 +00:08:21:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:08:21:21:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:08:21:21:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:08:21:21:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:08:21:21:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:09:43:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:09:43:43:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:09:5B:00:00:00/FF:FF:FF:00:00:00 Netgear Unknown 0 +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear MA401 0 +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear MA401RA 0 +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear MA401RA +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear MA701 0 +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear MA701 +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear ma101 0 +00:09:5B:5B:00:00/FF:FF:FF:FF:00:00 Netgear wab501 0 +00:09:7C:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:09:7C:7C:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:09:7C:7C:00:00/FF:FF:FF:FF:00:00 Cisco Cisco Aironet 352 802.11b pcmcia card 0 +00:09:92:92:00:00/FF:FF:FF:FF:00:00 Sweex LC500010 ATMEL PCMCIA FastVNET (502A-D) 0 +00:09:B7:B7:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 0 +00:09:B7:B7:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 0 +00:09:E8:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:09:E8:E8:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 +00:0A:41:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:0A:41:41:00:00/FF:FF:FF:FF:00:00 Cisco AIR-LMC352 0 +00:0A:41:41:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 0 +00:0A:41:41:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 0 +00:0A:41:41:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:0A:41:41:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:0A:8A:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:0A:8A:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:0A:8A:8A:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:0B:5F:5F:00:00/FF:FF:FF:FF:00:00 Cisco AIR-CB20A-A-K9 0 +00:20:A6:A6:00:00/FF:FF:FF:FF:00:00 Proxim Symphony (PC Card 4430) 0 +00:20:D6:D6:00:00/FF:FF:FF:FF:00:00 BreezeCOM Breezenet Pro.11 SA-PCR 0 +00:30:65:00:00:00/FF:FF:FF:00:00:00 Apple Unknown 0 +00:30:65:00:00:00/FF:FF:FF:00:00:00 Apple Unknown 0 +00:30:65:65:00:00/FF:FF:FF:FF:00:00 Apple Airport Card 2002 +00:30:AB:00:00:00/FF:FF:FF:00:00:00 Netgear Unknown 0 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MA401 0 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MA401 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MA401 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MA401 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MA401 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear MR314 Wireless 1 192.168.0.1 +00:30:AB:AB:00:00/FF:FF:FF:FF:00:00 Netgear Netgear ma401 0 +00:30:BD:00:00:00/FF:FF:FF:00:00:00 Belkin Unknown 0 +00:30:BD:00:00:00/FF:FF:FF:00:00:00 Belkin Unknown 0 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6020 0 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6020 0 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6020 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6020 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6020 (Version 01.02) 0 +00:30:BD:BD:00:00/FF:FF:FF:FF:00:00 Belkin F5D6020u 0 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DI-614+ default 6 192.168.0.1 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DI-614+ 22Mbps router/AP/switch default 6 192.168.0.1 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DWL-520+ 0 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 0 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650 internet 8 +00:40:05:05:00:00/FF:FF:FF:FF:00:00 D-Link DWL-650+ wireless 6 192.168.0.1 +00:40:26:00:00:00/FF:FF:FF:00:00:00 Buffalo Unknown 0 +00:40:96:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown 0 +00:40:96:00:00:00/FF:FF:FF:00:00:00 Cisco Unknown tsunami 6 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco 350 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PC4800 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 0 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 0 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM340 (Dell Rebrand) 0 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco AIR-PCM352 +00:40:96:96:00:00/FF:FF:FF:FF:00:00 Cisco PC 4800 DS PCI Adapter 0 +00:50:08:00:00:00/FF:FF:FF:00:00:00 Compaq Unknown 0 +00:50:08:08:00:00/FF:FF:FF:FF:00:00 Compaq WL100 0 +00:50:08:08:00:00/FF:FF:FF:FF:00:00 Compaq WL100 +00:50:8B:8B:00:00/FF:FF:FF:FF:00:00 Compaq Compaq WL100 compaq 0 +00:50:8B:8B:00:00/FF:FF:FF:FF:00:00 Compaq WL200 - ETSI region 0 +00:50:DA:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:50:DA:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:50:DA:DA:00:00/FF:FF:FF:FF:00:00 3Com 3CRWE73796B +00:50:F2:F2:00:00/FF:FF:FF:FF:00:00 Microsoft MN-510 0 +00:50:F2:F2:00:00/FF:FF:FF:FF:00:00 Microsoft Wireless Notebook Adapter MN-520 0 +00:60:01:00:00:00/FF:FF:FF:00:00:00 Lucent Unknown 0 +00:60:01:01:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN Silver +00:60:1D:00:00:00/FF:FF:FF:00:00:00 Lucent Unknown 0 +00:60:1D:00:00:00/FF:FF:FF:00:00:00 Orinoco Unknown 0 +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent Lucent WaveLAN Turbo - Bronze, P/N: 011498/A 0 +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent Orinoco Gold +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent PC24E-00-FC 0 +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent Silver +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN Bronze +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent WaveLAN Gold +00:60:1D:1D:00:00/FF:FF:FF:FF:00:00 Lucent Wavelan Turbo Bronze 0 +00:60:6D:00:00:00/FF:FF:FF:00:00:00 Cabletron Unknown 0 +00:60:6D:6D:00:00/FF:FF:FF:FF:00:00 Cabletron CSIBB-AA +00:60:6D:6D:00:00/FF:FF:FF:FF:00:00 Cabletron CSIBB-AA +00:60:6D:6D:00:00/FF:FF:FF:FF:00:00 Cabletron RoamAbout 802.11DS 0 +00:60:B3:00:00:00/FF:FF:FF:00:00:00 Proxim Unknown 0 +00:60:B3:B3:00:00/FF:FF:FF:FF:00:00 3Com XI-815 0 +00:60:B3:B3:00:00/FF:FF:FF:FF:00:00 3Com Zcom WL2000D 0 +00:60:B3:B3:00:00/FF:FF:FF:FF:00:00 Proxim RangeLAN DS 0 +00:60:B3:B3:00:00/FF:FF:FF:FF:00:00 Proxim RangeLan DS 8430 +00:60:B3:B3:00:00/FF:FF:FF:FF:00:00 SMC SMC2642W +00:80:37:37:00:00/FF:FF:FF:FF:00:00 Ericsson C11 (LA-4121-102M-ER-EU) 0 +00:80:C6:00:00:00/FF:FF:FF:00:00:00 SOHOware Unknown 0 +00:90:4B:4B:00:00/FF:FF:FF:FF:00:00 Dell 1180 True Mobile PCI 0 +00:90:96:96:00:00/FF:FF:FF:FF:00:00 Yakumo WLAN PCMCIA Card 11 Mbps 0 +00:90:D1:00:00:00/FF:FF:FF:00:00:00 LeArtery Unknown 0 +00:90:D1:00:00:00/FF:FF:FF:00:00:00 SMC Unknown WLAN 11 +00:90:D1:D1:00:00/FF:FF:FF:FF:00:00 LeArtery SyncByAir LN101 +00:90:D1:D1:00:00/FF:FF:FF:FF:00:00 SMC 2662W 0 +00:90:D1:D1:00:00/FF:FF:FF:FF:00:00 SMC SMC2632W 0 +00:A0:04:00:00:00/FF:FF:FF:00:00:00 3Com Unknown 0 +00:A0:65:65:00:00/FF:FF:FF:FF:00:00 Nexland Zcom XI-300 0 +00:A0:F8:00:00:00/FF:FF:FF:00:00:00 Symbol Unknown 0 +00:A0:F8:F8:00:00/FF:FF:FF:FF:00:00 Symbol Spectrum 24 High Rate 11MBps wireless LAN adapter 0 +00:A0:F8:F8:00:00/FF:FF:FF:FF:00:00 Symbol Spectrum24 +00:C0:49:49:00:00/FF:FF:FF:FF:00:00 US Robotics USR1120 0 +00:E0:29:00:00:00/FF:FF:FF:00:00:00 OEM Unknown 0 +00:E0:29:29:00:00/FF:FF:FF:FF:00:00 OEM OEM +00:E0:29:29:00:00/FF:FF:FF:FF:00:00 SMC 2632W 0 +00:E0:29:29:00:00/FF:FF:FF:FF:00:00 SMC EZ-Connect Wireless 0 +08:00:46:00:00:00/FF:FF:FF:00:00:00 Sony Unknown 0 +08:00:46:46:00:00/FF:FF:FF:FF:00:00 Sony PCWA-C100 diff --git a/net/kismet/files/kismet.conf b/net/kismet/files/kismet.conf new file mode 100644 index 000000000..a417d2885 --- /dev/null +++ b/net/kismet/files/kismet.conf @@ -0,0 +1,281 @@ +# Kismet config file +# Most of the "static" configs have been moved to here -- the command line +# config was getting way too crowded and cryptic. We want functionality, +# not continually reading --help! + +# Version of Kismet config +version=2005.01.R1 + +# Name of server (Purely for organiational purposes) +servername=Kismet + +# User to setid to (should be your normal user) +suiduser=nobody + +# Sources are defined as: +# source=cardtype,interface,name[,initialchannel] +# Card types and required drivers are listed in the README. +# The initial channel is optional, if hopping is not enabled it can be used +# to set the channel the interface listens on. +# YOU MUST CHANGE THIS TO BE THE SOURCE YOU WANT TO USE +source=wrt54g,eth1,wireless +# For v1 hardware uncomment this: +# source=wrt54g,eth2,wireless + +# Comma-separated list of sources to enable. This is only needed if you defined +# multiple sources and only want to enable some of them. By default, all defined +# sources are enabled. +# For example: +# enablesources=prismsource,ciscosource + +# Do we channelhop? +channelhop=true + +# How many channels per second do we hop? (1-10) +channelvelocity=5 + +# By setting the dwell time for channel hopping we override the channelvelocity +# setting above and dwell on each channel for the given number of seconds. +#channeldwell=10 + +# Do we split channels between cards on the same spectrum? This means if +# multiple 802.11b capture sources are defined, they will be offset to cover +# the most possible spectrum at a given time. This also controls splitting +# fine-tuned sourcechannels lines which cover multiple interfaces (see below) +channelsplit=true + +# Basic channel hopping control: +# These define the channels the cards hop through for various frequency ranges +# supported by Kismet. More finegrain control is available via the +# "sourcechannels" configuration option. +# +# Don't change the IEEE80211 identifiers or channel hopping won't work. + +# Users outside the US might want to use this list: +# defaultchannels=IEEE80211b:1,7,13,2,8,3,14,9,4,10,5,11,6,12 +defaultchannels=IEEE80211b:1,6,11,2,7,3,8,4,9,5,10 + +# 802.11g uses the same channels as 802.11b... +defaultchannels=IEEE80211g:1,6,11,2,7,3,8,4,9,5,10 + +# 802.11a channels are non-overlapping so sequential is fine. You may want to +# adjust the list depending on the channels your card actually supports. +# defaultchannels=IEEE80211a:36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,184,188,192,196,200,204,208,212,216 +defaultchannels=IEEE80211a:36,40,44,48,52,56,60,64 + +# Combo cards like Atheros use both 'a' and 'b/g' channels. Of course, you +# can also explicitly override a given source. You can use the script +# extras/listchan.pl to extract all the channels your card supports. +defaultchannels=IEEE80211ab:1,6,11,2,7,3,8,4,9,5,10,36,40,44,48,52,56,60,64 + +# Fine-tuning channel hopping control: +# The sourcechannels option can be used to set the channel hopping for +# specific interfaces, and to control what interfaces share a list of +# channels for split hopping. This can also be used to easily lock +# one card on a single channel while hopping with other cards. +# Any card without a sourcechannel definition will use the standard hopping +# list. +# sourcechannels=sourcename[,sourcename]:ch1,ch2,ch3,...chN + +# ie, for us channels on the source 'prism2source' (same as normal channel +# hopping behavior): +# sourcechannels=prism2source:1,6,11,2,7,3,8,4,9,5,10 + +# Given two capture sources, "prism2a" and "prism2b", we want prism2a to stay +# on channel 6 and prism2b to hop normally. By not setting a sourcechannels +# line for prism2b, it will use the standard hopping. +# sourcechannels=prism2a:6 + +# To assign the same custom hop channel to multiple sources, or to split the +# same custom hop channel over two sources (if splitchannels is true), list +# them all on the same sourcechannels line: +# sourcechannels=prism2a,prism2b,prism2c:1,6,11 + +# Port to serve GUI data +tcpport=2501 +# People allowed to connect, comma seperated IP addresses or network/mask +# blocks. Netmasks can be expressed as dotted quad (/255.255.255.0) or as +# numbers (/24) +allowedhosts=127.0.0.1 +# Maximum number of concurrent GUI's +maxclients=5 + +# Do we have a GPS? +gps=false +# Host:port that GPSD is running on. This can be localhost OR remote! +gpshost=localhost:2947 +# Do we lock the mode? This overrides coordinates of lock "0", which will +# generate some bad information until you get a GPS lock, but it will +# fix problems with GPS units with broken NMEA that report lock 0 +gpsmodelock=false + +# Packet filtering options: +# filter_tracker - Packets filtered from the tracker are not processed or +# recorded in any way. +# filter_dump - Packets filtered at the dump level are tracked, displayed, +# and written to the csv/xml/network/etc files, but not +# recorded in the packet dump +# filter_export - Controls what packets influence the exported CSV, network, +# xml, gps, etc files. +# All filtering options take arguments containing the type of address and +# addresses to be filtered. Valid address types are 'ANY', 'BSSID', +# 'SOURCE', and 'DEST'. Filtering can be inverted by the use of '!' before +# the address. For example, +# filter_tracker=ANY(!00:00:DE:AD:BE:EF) +# has the same effect as the previous mac_filter config file option. +# filter_tracker=... +# filter_dump=... +# filter_export=... + +# Alerts to be reported and the throttling rates. +# alert=name,throttle/unit,burst +# The throttle/unit describes the number of alerts of this type that are +# sent per time unit. Valid time units are second, minute, hour, and day. +# Burst describes the number of alerts sent before throttling takes place. +# For example: +# alert=FOO,10/min,5 +# Would allow 5 alerts through before throttling is enabled, and will then +# limit the number of alerts to 10 per minute. +# A throttle rate of 0 disables throttling of the alert. +# See the README for a list of alert types. +alert=NETSTUMBLER,5/min,2 +alert=WELLENREITER,5/min,2 +alert=LUCENTTEST,5/min,2 +alert=DEAUTHFLOOD,5/min,4 +alert=BCASTDISCON,5/min,4 +alert=CHANCHANGE,5/min,4 +alert=AIRJACKSSID,5/min,2 +alert=PROBENOJOIN,5/min,2 +alert=DISASSOCTRAFFIC,5/min,2 +alert=NULLPROBERESP,5/min,5 +alert=BSSTIMESTAMP,5/min,5 + +# Known WEP keys to decrypt, bssid,hexkey. This is only for networks where +# the keys are already known, and it may impact throughput on slower hardware. +# Multiple wepkey lines may be used for multiple BSSIDs. +# wepkey=00:DE:AD:C0:DE:00,FEEDFACEDEADBEEF01020304050607080900 + +# Is transmission of the keys to the client allowed? This may be a security +# risk for some. If you disable this, you will not be able to query keys from +# a client. +allowkeytransmit=true + +# How often (in seconds) do we write all our data files (0 to disable) +writeinterval=300 + +# Where do we get our manufacturer fingerprints from? Assumed to be in the +# default config directory if an absolute path is not given. +ap_manuf=ap_manuf +client_manuf=client_manuf + +# Use metric measurements in the output? +metric=false + +# Do we write waypoints for gpsdrive to load? Note: This is NOT related to +# recent versions of GPSDrive's native support of Kismet. +waypoints=false +# GPSMap waypoint file. This WILL be truncated. +waypointdata=%h/.gpsdrive/way_kismet.txt + +# How many alerts do we backlog for new clients? Only change this if you have +# a -very- low memory system and need those extra bytes, or if you have a high +# memory system and a huge number of alert conditions. +alertbacklog=50 + +# File types to log, comma seperated +# dump - raw packet dump +# network - plaintext detected networks +# csv - plaintext detected networks in CSV format +# xml - XML formatted network and cisco log +# weak - weak packets (in airsnort format) +# cisco - cisco equipment CDP broadcasts +# gps - gps coordinates +logtypes=dump,network,csv,xml,weak,cisco,gps + +# Do we track probe responses and merge probe networks into their owners? +# This isn't always desireable, depending on the type of monitoring you're +# trying to do. +trackprobenets=true + +# Do we log "noise" packets that we can't decipher? I tend to not, since +# they don't have anything interesting at all in them. +noiselog=false + +# Do we log corrupt packets? Corrupt packets have enough header information +# to see what they are, but someting is wrong with them that prevents us from +# completely dissecting them. Logging these is usually not a bad idea. +corruptlog=true + +# Do we log beacon packets or do we filter them out of the dumpfile +beaconlog=true + +# Do we log PHY layer packets or do we filter them out of the dumpfile +phylog=true + +# Do we mangle packets if we can decrypt them or if they're fuzzy-detected +mangledatalog=true + +# Do we do "fuzzy" crypt detection? (byte-based detection instead of 802.11 +# frame headers) +# valid option: Comma seperated list of card types to perform fuzzy detection +# on, or 'all' +fuzzycrypt=wtapfile,wlanng,wlanng_legacy,wlanng_avs,hostap,wlanng_wext + +# What type of dump do we generate? +# valid option: "wiretap" +dumptype=wiretap +# Do we limit the size of dump logs? Sometimes ethereal can't handle big ones. +# 0 = No limit +# Anything else = Max number of packets to log to a single file before closing +# and opening a new one. +dumplimit=0 + +# Do we write data packets to a FIFO for an external data-IDS (such as Snort)? +# See the docs before enabling this. +#fifo=/tmp/kismet_dump + +# Default log title +logdefault=Kismet + +# logtemplate - Filename logging template. +# This is, at first glance, really nasty and ugly, but you'll hardly ever +# have to touch it so don't complain too much. +# +# %n is replaced by the logging instance name +# %d is replaced by the current date as Mon-DD-YYYY +# %D is replaced by the current date as YYYYMMDD +# %t is replaced by the starting log time +# %i is replaced by the increment log in the case of multiple logs +# %l is replaced by the log type (dump, status, crypt, etc) +# %h is replaced by the home directory +# ie, "netlogs/%n-%d-%i.dump" called with a logging name of "Pok" could expand +# to something like "netlogs/Pok-Dec-20-01-1.dump" for the first instance and +# "netlogs/Pok-Dec-20-01-2.%l" for the second logfile generated. +# %h/netlots/%n-%d-%i.dump could expand to +# /home/foo/netlogs/Pok-Dec-20-01-2.dump +# +# Other possibilities: Sorting by directory +# logtemplate=%l/%n-%d-%i +# Would expand to, for example, +# dump/Pok-Dec-20-01-1 +# crypt/Pok-Dec-20-01-1 +# and so on. The "dump", "crypt", etc, dirs must exist before kismet is run +# in this case. +logtemplate=%n-%d-%i.%l + +# Where do we store the pid file of the server? +piddir=/var/run/ + +# Where state info, etc, is stored. You shouldnt ever need to change this. +# This is a directory. +configdir=%h/.kismet/ + +# cloaked SSID file. You shouldn't ever need to change this. +ssidmap=ssid_map + +# Group map file. You shouldn't ever need to change this. +groupmap=group_map + +# IP range map file. You shouldn't ever need to change this. +ipmap=ip_map + diff --git a/net/kismet/files/kismet_drone.conf b/net/kismet/files/kismet_drone.conf new file mode 100644 index 000000000..901b5b83e --- /dev/null +++ b/net/kismet/files/kismet_drone.conf @@ -0,0 +1,121 @@ +# Kismet drone config file + +version=2005.04.R1 + +# Name of server (Purely for organiational purposes) +servername=Kismet + +# User to setid to (should be your normal user) +suiduser=nobody + +# Port to serve packet data... This probably shouldn't be the same as the port +# you configured kismet_server for, or else you'll have problems running them +# on the same system. +tcpport=3501 +# People allowed to connect, comma seperated IP addresses or network/mask +# blocks. Netmasks can be expressed as dotted quad (/255.255.255.0) or as +# numbers (/24) +allowedhosts=127.0.0.1 +# Maximum number of concurrent stream attachments +maxclients=5 + +# Packet sources: +# source=capture_cardtype,capture_interface,capture_name +# Card type - Specifies the type of device. It can be one of: +# cisco - Cisco card with Linux Kernel drivers +# cisco_cvs - Cisco card with CVS Linux drivers +# cisco_bsd - Cisco on *BSD +# prism2 - Prism2 using wlan-ng drivers with pcap support (all +# current versions support pcap) +# prism2_hostap - Prism2 using hostap drivers +# prism2_legacy - Prism2 using wlan-ng drivers without pcap support (0.1.9) +# prism2_bsd - Prism2 on *BSD +# orinoco - Orinoco cards using Snax's patched driers +# generic - Generic card with no specific support. You will have +# to put this into monitor mode yourself! +# wsp100 - WSP100 embedded remote sensor. +# wtapfile - Saved file of packets readable by libwiretap +# ar5k - ar5k 802.11a using the vt_ar5k drivers +# Capture interface - Specifies the network interface Kismet will watch for +# packets to come in on. Typically "ethX" or "wlanX". For the WSP100 capture +# engine, the WSP100 device sends packets via a UDP stream, so the capture +# interface should be in the form of host:port where 'host' is the WSP100 and +# 'port' is the local UDP port that it will send data to. +# Capture Name - The name Kismet uses for this capture source. This is the +# name used to specify what sources to enable. +# +# To enable multiple sources, specify a source line for each and then use the +# enablesources line to enable them. For example: +# source=prism2,wlan0,prism +# source=cisco,eth0,cisco +source=wrt54g,eth1,wireless +# For v1 hardware uncomment this: +# source=wrt54g,eth2,wireless + +# Comma-separated list of sources to enable. This is only needed if you wish +# to selectively enable multiple sources. +# enablesources=prism,cisco + +# Do we channelhop? +channelhop=true + +# How many channels per second do we hop? (1-10) +channelvelocity=5 + +# By setting the dwell time for channel hopping we override the channelvelocity +# setting above and dwell on each channel for the given number of seconds. +#channeldwell=10 + +# Do we split channels between cards on the same spectrum? This means if +# multiple 802.11b capture sources are defined, they will be offset to cover +# the most possible spectrum at a given time. This also controls splitting +# fine-tuned sourcechannels lines which cover multiple interfaces (see below) +splitchannels=true + +# Basic channel hopping control: +# These define the channels the cards hop through for various frequency ranges +# supported by Kismet. More finegrain control is available via the +# "sourcechannels" configuration option. +# +# Don't change the IEEE80211 identifiers or channel hopping won't work. + +# Users outside the US might want to use this list: +# defaultchannels=IEEE80211b:1,7,13,2,8,3,14,9,4,10,5,11,6,12 +defaultchannels=IEEE80211b:1,6,11,2,7,3,8,4,9,5,10 + +# 802.11g uses the same channels as 802.11b... +defaultchannels=IEEE80211g:1,6,11,2,7,3,8,4,9,5,10 + +# 802.11a channels are non-overlapping so sequential is fine. You may want to +# adjust the list depending on the channels your card actually supports. +# defaultchannels=IEEE80211a:36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,184,188,192,196,200,204,208,212,216 +defaultchannels=IEEE80211a:36,40,44,48,52,56,60,64 + +# Combo cards like Atheros use both 'a' and 'b/g' channels. Of course, you +# can also explicitly override a given source. You can use the script +# extras/listchan.pl to extract all the channels your card supports. +defaultchannels=IEEE80211ab:1,6,11,2,7,3,8,4,9,5,10,36,40,44,48,52,56,60,64 + +# Fine-tuning channel hopping control: +# The sourcechannels option can be used to set the channel hopping for +# specific interfaces, and to control what interfaces share a list of +# channels for split hopping. This can also be used to easily lock +# one card on a single channel while hopping with other cards. +# Any card without a sourcechannel definition will use the standard hopping +# list. +# sourcechannels=sourcename[,sourcename]:ch1,ch2,ch3,...chN + +# ie, for us channels on the source 'prism2source' (same as normal channel +# hopping behavior): +# sourcechannels=prism2source:1,6,11,2,7,3,8,4,9,5,10 + +# Given two capture sources, "prism2a" and "prism2b", we want prism2a to stay +# on channel 6 and prism2b to hop normally. By not setting a sourcechannels +# line for prism2b, it will use the standard hopping. +# sourcechannels=prism2a:6 + +# To assign the same custom hop channel to multiple sources, or to split the +# same custom hop channel over two sources (if splitchannels is true), list +# them all on the same sourcechannels line: +# sourcechannels=prism2a,prism2b,prism2c:1,6,11 + diff --git a/net/kismet/files/kismet_ui.conf b/net/kismet/files/kismet_ui.conf new file mode 100644 index 000000000..e704b37e5 --- /dev/null +++ b/net/kismet/files/kismet_ui.conf @@ -0,0 +1,61 @@ +# Kismet GUI config file + +# Version of Kismet config +version=2005.04.R1 + +# Do we show the intro window? +showintro=false + +# Gui type to use +# Valid types: curses, panel +gui=panel +# Server to connect to (host:port) +host=localhost:2501 +# Network traffic decay (active/recent/inactive) and packet click rate - increase +# this if you are doing prism2 channel hopping. +decay=3 +# What columns do we display? Comma seperated. Read the documentation for what +# columns are valid. +columns=decay,name,type,wep,channel,packets,flags,ip,size +# What columns do we display for clients? Comma seperated. +clientcolumns=decay,type,mac,manuf,data,crypt,size,ip,signal,quality,noise + +# Do we auotmatically make a group for probed networks or do we show them +# amidst other networks? +autogroup_probe=true +# Do we autogroup data-only networks? +autogroup_data=true + +# Display battery status? +apm=false + +# Simple borders (use - and | instead of smooth vertical and horizontal +# lines. This is required on Zaurus, and might be needed elsewhere if your +# terminal doesn't display the border characters correctly. +simpleborders=false + +# Colors (front, back) of text in the panel front. Valid colors are: +# black, red, yellow, green, blue, magenta, cyan, white +# optionally prefixed with "hi-" for bold/bright colors, ie +# hi-red, hi-yellow, hi-green, etc. + +# Enable colors? +color=true +# Background +backgroundcolor=black +# Default text +textcolor=white +# Window borders +bordercolor=green +# Titles +titlecolor=hi-white +# GPS and APM info +monitorcolor=hi-white +# WEP network color +wepcolor=hi-green +# Factory network color +factorycolor=hi-red +# Open color +opencolor=hi-yellow +# Decloaked network color +cloakcolor=hi-blue diff --git a/net/kismet/patches/100-wrt54g_source.patch b/net/kismet/patches/100-wrt54g_source.patch new file mode 100644 index 000000000..3336a8f42 --- /dev/null +++ b/net/kismet/patches/100-wrt54g_source.patch @@ -0,0 +1,189 @@ +diff -urN kismet.old/kis_packsources.cc kismet.dev/kis_packsources.cc +--- kismet.old/kis_packsources.cc 2005-08-16 03:22:51.000000000 +0200 ++++ kismet.dev/kis_packsources.cc 2005-08-23 00:59:04.465379568 +0200 +@@ -192,7 +192,7 @@ + chancontrol_wlanng_avs, 1); + sourcetracker->RegisterPacketsource("wrt54g", 1, "na", 0, + pcapsource_wrt54g_registrant, +- monitor_wrt54g, NULL, NULL, 0); ++ monitor_wrt54g, unmonitor_wrt54g, chancontrol_wext, 0); + #else + REG_EMPTY_CARD(sourcetracker, "wlanng"); + REG_EMPTY_CARD(sourcetracker, "wlanng_avs"); +diff -urN kismet.old/packetsourcetracker.cc kismet.dev/packetsourcetracker.cc +--- kismet.old/packetsourcetracker.cc 2005-08-16 03:22:51.000000000 +0200 ++++ kismet.dev/packetsourcetracker.cc 2005-08-23 00:59:39.969982048 +0200 +@@ -986,6 +986,7 @@ + (meta_packsources[chanpak.meta_num]->device.c_str(), + chanpak.channel, errstr, + (void *) (meta_packsources[chanpak.meta_num]->capsource)) < 0) { ++#if 0 + + meta_packsources[chanpak.meta_num]->consec_errors++; + +@@ -1007,6 +1008,7 @@ + CHANFLAG_FATAL)); + continue; + } ++#endif + } else { + // Otherwise reset the error count + meta_packsources[chanpak.meta_num]->consec_errors = 0; +diff -urN kismet.old/pcapsource.cc kismet.dev/pcapsource.cc +--- kismet.old/pcapsource.cc 2005-08-16 03:22:51.000000000 +0200 ++++ kismet.dev/pcapsource.cc 2005-08-23 01:03:45.652632608 +0200 +@@ -115,6 +115,53 @@ + u_char callback_data[MAX_PACKET_LEN]; + + // Open a source ++int PcapSourceWrt54g::OpenSource() { ++ channel = 0; ++ ++ errstr[0] = '\0'; ++ ++ char *unconst = strdup("prism0"); ++ ++ pd = pcap_open_live(unconst, MAX_PACKET_LEN, 1, 1000, errstr); ++ ++ #if defined (SYS_OPENBSD) || defined(SYS_NETBSD) && defined(HAVE_RADIOTAP) ++ /* Request desired DLT on multi-DLT systems that default to EN10MB. We do this ++ later anyway but doing it here ensures we have the desired DLT from the get go. */ ++ pcap_set_datalink(pd, DLT_IEEE802_11_RADIO); ++ #endif ++ ++ free(unconst); ++ ++ if (strlen(errstr) > 0) ++ return -1; // Error is already in errstr ++ ++ paused = 0; ++ ++ errstr[0] = '\0'; ++ ++ num_packets = 0; ++ ++ if (DatalinkType() < 0) ++ return -1; ++ ++#ifdef HAVE_PCAP_NONBLOCK ++ pcap_setnonblock(pd, 1, errstr); ++#elif !defined(SYS_OPENBSD) ++ // do something clever (Thanks to Guy Harris for suggesting this). ++ int save_mode = fcntl(pcap_get_selectable_fd(pd), F_GETFL, 0); ++ if (fcntl(pcap_get_selectable_fd(pd), F_SETFL, save_mode | O_NONBLOCK) < 0) { ++ snprintf(errstr, 1024, "fcntl failed, errno %d (%s)", ++ errno, strerror(errno)); ++ } ++#endif ++ ++ if (strlen(errstr) > 0) ++ return -1; // Ditto ++ ++ return 1; ++} ++ ++// Open a source + int PcapSource::OpenSource() { + channel = 0; + +@@ -1928,63 +1975,32 @@ + int monitor_wrt54g(const char *in_dev, int initch, char *in_err, void **in_if, + void *in_ext) { + char cmdline[2048]; +- int mode; +- int wlmode = 0; +- +-#ifdef HAVE_LINUX_WIRELESS +- vector devbits = StrTokenize(in_dev, ":"); + +- if (devbits.size() < 2) { +- snprintf(cmdline, 2048, "/usr/sbin/wl monitor 1"); ++ snprintf(cmdline, 2048, "/usr/sbin/iwpriv %s set_monitor 1", in_dev); + if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to set mode using 'wl monitor 1'. Some " +- "custom firmware images require you to specify the origial " ++ snprintf(in_err, 1024, "Unable to set mode using 'iwpriv %s set_monitor 1'. " ++ "Some custom firmware images require you to specify the origial " + "device and a new dynamic device and use the iwconfig controls. " + "see the README for how to configure your capture source."); + return -1; + } +- } else { +- // Get the mode ... If this doesn't work, try the old wl method. +- if (Iwconfig_Get_Mode(devbits[0].c_str(), in_err, &mode) < 0) { +- fprintf(stderr, "WARNING: Getting wireless mode via ioctls failed, " +- "defaulting to trying the 'wl' command.\n"); +- wlmode = 1; +- } + +- if (wlmode == 1) { +- snprintf(cmdline, 2048, "/usr/sbin/wl monitor 1"); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- } else if (mode != LINUX_WLEXT_MONITOR) { +- // Set it +- if (Iwconfig_Set_Mode(devbits[0].c_str(), in_err, +- LINUX_WLEXT_MONITOR) < 0) { +- snprintf(in_err, STATUS_MAX, "Unable to set iwconfig monitor " +- "mode. If you are using an older wrt54g, try specifying " +- "only the ethernet device, not ethX:prismX"); +- return -1; +- } ++ return 1; ++} ++ ++ ++int unmonitor_wrt54g(const char *in_dev, int initch, char *in_err, void **in_if, ++ void *in_ext) { ++ char cmdline[2048]; ++ ++ snprintf(cmdline, 2048, "/usr/sbin/iwpriv %s set_monitor 0", in_dev); ++ if (RunSysCmd(cmdline) < 0) { ++ snprintf(in_err, 1024, "Unable to set mode using 'iwpriv %s set_monitor 0'. " ++ "Some custom firmware images require you to specify the origial " ++ "device and a new dynamic device and use the iwconfig controls. " ++ "see the README for how to configure your capture source."); ++ return -1; + } +- } +-#else +- snprintf(cmdline, 2048, "/usr/sbin/wl monitor 1"); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to set mode using 'wl monitor 1'. Some " +- "custom firmware images require you to specify the origial " +- "device and a new dynamic device and use the iwconfig controls. " +- "see the README for how to configure your capture source. " +- "Support for wireless extensions was not compiled in, so more " +- "advanced modes of setting monitor mode are not available."); +- return -1; +- } +- fprintf(stderr, "WARNING: Support for wireless extensions was not compiled " +- "into this binary. Using the iw* tools to set monitor mode will not " +- "be available. This may cause opening the source to fail on some " +- "firmware versions. To fix this, make sure wireless extensions are " +- "available and found by the configure script when building Kismet."); +-#endif + + return 1; + } +diff -urN kismet.old/pcapsource.h kismet.dev/pcapsource.h +--- kismet.old/pcapsource.h 2005-08-16 03:22:51.000000000 +0200 ++++ kismet.dev/pcapsource.h 2005-08-23 01:04:26.057490136 +0200 +@@ -265,6 +265,7 @@ + PcapSourceWrt54g(string in_name, string in_dev) : PcapSource(in_name, in_dev) { + fcsbytes = 4; + } ++ int OpenSource(); + int FetchPacket(kis_packet *packet, uint8_t *data, uint8_t *moddata); + protected: + carrier_type IEEE80211Carrier(); +@@ -412,6 +413,7 @@ + int monitor_wlanng_avs(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext); + // linksys wrt54g monitoring + int monitor_wrt54g(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext); ++int unmonitor_wrt54g(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext); + #endif + + // This should be expanded to handle BSD... diff --git a/net/kismet/patches/110-uclibc++_fixes.patch b/net/kismet/patches/110-uclibc++_fixes.patch new file mode 100644 index 000000000..7325ac161 --- /dev/null +++ b/net/kismet/patches/110-uclibc++_fixes.patch @@ -0,0 +1,11 @@ +diff -urN kismet-2005-04-R1.old/configfile.cc kismet-2005-04-R1.dev/configfile.cc +--- kismet-2005-04-R1.old/configfile.cc 2005-04-03 07:33:42.000000000 +0200 ++++ kismet-2005-04-R1.dev/configfile.cc 2005-04-26 01:37:32.000000000 +0200 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include "configfile.h" + #include "util.h" + diff --git a/net/kismet/patches/120-cleanup.patch b/net/kismet/patches/120-cleanup.patch new file mode 100644 index 000000000..691492e84 --- /dev/null +++ b/net/kismet/patches/120-cleanup.patch @@ -0,0 +1,3287 @@ +diff -urN kismet.dev/cursesfront.cc kismet.dev2/cursesfront.cc +--- kismet.dev/cursesfront.cc 2005-03-10 17:49:34.000000000 +0100 ++++ kismet.dev2/cursesfront.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -30,7 +30,6 @@ + // Enable the protocols we can use + void NCurseFront::AddClient(TcpClient *in_client) { + client = in_client; +- client->EnableProtocol("GPS"); + client->EnableProtocol("INFO"); + client->EnableProtocol("REMOVE"); + client->EnableProtocol("NETWORK"); +@@ -88,32 +87,8 @@ + mvwaddstr(netborder, 1, 2, " SSID T W Ch Data LLC Crypt Wk Flags"); + } + +- char gpsdata[1024]; +- float lat, lon, alt, spd, heading; + int mode; + +- client->FetchLoc(&lat, &lon, &alt, &spd, &heading, &mode); +- +- if (!(lat == 0 && lon == 0 && alt == 0 && spd == 0 && mode == 0)) { +- +- char fix[16]; +- +- if (mode == -1) +- snprintf(fix, 16, "No signal"); +- else if (mode == 2) +- snprintf(fix, 5, "2D"); +- else if (mode == 3) +- snprintf(fix, 5, "3D"); +- else +- snprintf(fix, 5, "NONE"); +- +- snprintf(gpsdata, 1024, "Lat %.3f Lon %.3f Alt %.3f Spd %.3f Fix %s", +- lat, lon, alt, spd, fix); +- +- mvwaddstr(netborder, LINES-statheight-1, 2, gpsdata); +- +- } +- + box(infoborder, '|', '-'); + mvwaddstr(infoborder, 0, 2, "Info"); + +diff -urN kismet.dev/dronesource.cc kismet.dev2/dronesource.cc +--- kismet.dev/dronesource.cc 2005-05-26 16:51:45.000000000 +0200 ++++ kismet.dev2/dronesource.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -201,9 +201,6 @@ + return -1; + } + +- // Grab the GPS info +- gps_enabled = vpkt.gps_enabled; +- + stream_recv_bytes = 0; + + // printf("debug - version packet valid\n\n"); +@@ -336,25 +333,6 @@ + packet->encoding = (encoding_type) phdr.encoding; + packet->datarate = (uint32_t) ntohl(phdr.datarate); + +- if (gps_enabled) { +- // If the drone is sending us GPS data, use it +- packet->gps_lat = Pair2Float((int16_t) ntohs(phdr.gps_lat), +- (int64_t) kis_ntoh64(phdr.gps_lat_mant)); +- packet->gps_lon = Pair2Float((int16_t) ntohs(phdr.gps_lon), +- (int64_t) kis_ntoh64(phdr.gps_lon_mant)); +- packet->gps_alt = Pair2Float((int16_t) ntohs(phdr.gps_alt), +- (int64_t) kis_ntoh64(phdr.gps_alt_mant)); +- packet->gps_spd = Pair2Float((int16_t) ntohs(phdr.gps_spd), +- (int64_t) kis_ntoh64(phdr.gps_spd_mant)); +- packet->gps_heading = Pair2Float((int16_t) ntohs(phdr.gps_heading), +- (int64_t) kis_ntoh64(phdr.gps_heading_mant)); +- packet->gps_fix = phdr.gps_fix; +- } else if (gpsd != NULL) { +- // Otherwise, no +- gpsd->FetchLoc(&packet->gps_lat, &packet->gps_lon, &packet->gps_alt, +- &packet->gps_spd, &packet->gps_heading, &packet->gps_fix); +- } +- + packet->data = data; + packet->moddata = moddata; + packet->modified = 0; +diff -urN kismet.dev/dronesource.h kismet.dev2/dronesource.h +--- kismet.dev/dronesource.h 2005-05-26 16:51:45.000000000 +0200 ++++ kismet.dev2/dronesource.h 2006-04-14 19:31:55.000000000 +0200 +@@ -79,9 +79,6 @@ + uint8_t databuf[MAX_PACKET_LEN]; + + unsigned int resyncing; +- +- // Is the drone pushing GPS data to us? +- int gps_enabled; + }; + + // Nothing but a registrant for us +diff -urN kismet.dev/frontend.cc kismet.dev2/frontend.cc +--- kismet.dev/frontend.cc 2005-06-29 20:04:43.000000000 +0200 ++++ kismet.dev2/frontend.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -248,33 +248,6 @@ + + } + +- // Aggregate the GPS data +- if (wnet->aggregate_points > 0) { +- dnet->virtnet->aggregate_lat += wnet->aggregate_lat; +- dnet->virtnet->aggregate_lon += wnet->aggregate_lon; +- dnet->virtnet->aggregate_alt += wnet->aggregate_alt; +- dnet->virtnet->aggregate_points += wnet->aggregate_points; +- } +- +- if (wnet->gps_fixed > dnet->virtnet->gps_fixed) +- dnet->virtnet->gps_fixed = wnet->gps_fixed; +- if (wnet->min_lat < dnet->virtnet->min_lat || dnet->virtnet->min_lat == 0) +- dnet->virtnet->min_lat = wnet->min_lat; +- if (wnet->min_lon < dnet->virtnet->min_lon || dnet->virtnet->min_lon == 0) +- dnet->virtnet->min_lon = wnet->min_lon; +- if (wnet->min_alt < dnet->virtnet->min_alt || dnet->virtnet->min_alt == 0) +- dnet->virtnet->min_alt = wnet->min_alt; +- if (wnet->min_spd < dnet->virtnet->min_spd || dnet->virtnet->min_spd == 0) +- dnet->virtnet->min_spd = wnet->min_spd; +- if (wnet->max_lat > dnet->virtnet->max_lat || dnet->virtnet->max_lat == 0) +- dnet->virtnet->max_lat = wnet->max_lat; +- if (wnet->max_lon > dnet->virtnet->max_lon || dnet->virtnet->max_lon == 0) +- dnet->virtnet->max_lon = wnet->max_lon; +- if (wnet->max_alt > dnet->virtnet->max_alt || dnet->virtnet->max_alt == 0) +- dnet->virtnet->max_alt = wnet->max_alt; +- if (wnet->max_spd > dnet->virtnet->max_spd || dnet->virtnet->max_spd == 0) +- dnet->virtnet->max_spd = wnet->max_spd; +- + // Aggregate the carriers and encodings + dnet->virtnet->carrier_set |= wnet->carrier_set; + dnet->virtnet->encoding_set |= wnet->encoding_set; +diff -urN kismet.dev/kismet_client.cc kismet.dev2/kismet_client.cc +--- kismet.dev/kismet_client.cc 2005-06-10 04:02:24.000000000 +0200 ++++ kismet.dev2/kismet_client.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -28,7 +28,6 @@ + #include "cursesfront.h" + #include "panelfront.h" + #include "configfile.h" +-#include "speech.h" + + #ifndef exec_name + char *exec_name; +@@ -47,11 +46,7 @@ + char *configfile; + char *uiconfigfile; + char *server = NULL; +-int sound = -1; +-int speech = -1; + int flite = 0; +-int speech_encoding = 0; +-string speech_sentence_encrypted, speech_sentence_unencrypted; + unsigned int metric = 0; + unsigned int reconnect = 0; + +@@ -59,20 +54,9 @@ + string configdir, groupfile; + FILE *group_file = NULL; + +-// Pipe file descriptor pairs and fd's +-int soundpair[2]; +-int speechpair[2]; +-pid_t soundpid = -1, speechpid = -1; +- + // Catch our interrupt + void CatchShutdown(int sig) { + +- // Kill our sound players +- if (soundpid > 0) +- kill(soundpid, 9); +- if (speechpid > 0) +- kill(speechpid, 9); +- + if (group_track) { + if ((group_file = fopen(groupfile.c_str(), "w")) == NULL) { + fprintf(stderr, "WARNING: Unable to open '%s' for writing, groups will not be saved.\n", +@@ -116,215 +100,6 @@ + exit(0); + } + +-// Subprocess sound handler +-void SoundHandler(int *fds, const char *player, map soundmap) { +- int read_sock = fds[0]; +- +- close(fds[1]); +- +- signal(SIGPIPE, PipeHandler); +- +- fd_set rset; +- +- char data[1024]; +- +- pid_t sndpid = -1; +- int harvested = 1; +- +- while (1) { +- FD_ZERO(&rset); +- FD_SET(read_sock, &rset); +- char *end; +- +- memset(data, 0, 1024); +- +- if (harvested == 0) { +- // We consider a wait error to be a sign that the child pid died +- // so we flag it as harvested and keep on going +- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG); +- if (harvestpid == -1 || harvestpid == sndpid) +- harvested = 1; +- } +- +- struct timeval tim; +- tim.tv_sec = 1; +- tim.tv_usec = 0; +- +- if (select(read_sock + 1, &rset, NULL, NULL, &tim) < 0) { +- if (errno != EINTR) { +- exit(1); +- } +- } +- +- if (FD_ISSET(read_sock, &rset)) { +- int ret; +- ret = read(read_sock, data, 1024); +- +- // We'll die off if we get a read error, and we'll let kismet on the +- // other side detact that it died +- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE)) +- exit(1); +- +- if ((end = strstr(data, "\n")) == NULL) +- continue; +- +- end[0] = '\0'; +- } +- +- if (data[0] == '\0') +- continue; +- +- // If we've harvested the process, spawn a new one and watch it +- // instead. Otherwise, we just let go of the data we read +- if (harvested == 1) { +- // Only take the first line +- char *nl; +- if ((nl = strchr(data, '\n')) != NULL) +- *nl = '\0'; +- +- char snd[1024]; +- +- if (soundmap.size() == 0) +- snprintf(snd, 1024, "%s", data); +- if (soundmap.find(data) != soundmap.end()) +- snprintf(snd, 1024, "%s", soundmap[data].c_str()); +- else +- continue; +- +- char plr[1024]; +- snprintf(plr, 1024, "%s", player); +- +- harvested = 0; +- if ((sndpid = fork()) == 0) { +- // Suppress errors +- int nulfd = open("/dev/null", O_RDWR); +- dup2(nulfd, 1); +- dup2(nulfd, 2); +- +- char * const echoarg[] = { plr, snd, NULL }; +- execve(echoarg[0], echoarg, NULL); +- } +- } +- +- data[0] = '\0'; +- } +-} +- +-// Subprocess speech handler +-void SpeechHandler(int *fds, const char *player) { +- int read_sock = fds[0]; +- close(fds[1]); +- +- fd_set rset; +- +- char data[1024]; +- +- pid_t sndpid = -1; +- int harvested = 1; +- +- while (1) { +- FD_ZERO(&rset); +- FD_SET(read_sock, &rset); +- //char *end; +- +- memset(data, 0, 1024); +- +- struct timeval tim; +- tim.tv_sec = 1; +- tim.tv_usec = 0; +- +- if (select(read_sock + 1, &rset, NULL, NULL, &tim) < 0) { +- if (errno != EINTR) { +- exit(1); +- } +- } +- +- if (harvested == 0) { +- // We consider a wait error to be a sign that the child pid died +- // so we flag it as harvested and keep on going +- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG); +- if (harvestpid == -1 || harvestpid == sndpid) +- harvested = 1; +- } +- +- if (FD_ISSET(read_sock, &rset)) { +- int ret; +- ret = read(read_sock, data, 1024); +- +- // We'll die off if we get a read error, and we'll let kismet on the +- // other side detact that it died +- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE)) +- exit(1); +- +- data[ret] = '\0'; +- +- } +- +- if (data[0] == '\0') +- continue; +- +- // If we've harvested the process, spawn a new one and watch it +- // instead. Otherwise, we just let go of the data we read +- if (harvested == 1) { +- harvested = 0; +- if ((sndpid = fork()) == 0) { +- // Only take the first line +- char *nl; +- if ((nl = strchr(data, '\n')) != NULL) +- *nl = '\0'; +- +- // Make sure it's shell-clean +- MungeToShell(data, strlen(data)); +- char spk_call[1024]; +- snprintf(spk_call, 1024, "echo \"(%s\\\"%s\\\")\" | %s " +- ">/dev/null 2>/dev/null", +- flite ? "": "SayText ", data, player); +- +- system(spk_call); +- +- exit(0); +- } +- } +- +- data[0] = '\0'; +- } +-} +- +- +-int PlaySound(string in_sound) { +- +- char snd[1024]; +- +- snprintf(snd, 1024, "%s\n", in_sound.c_str()); +- +- if (write(soundpair[1], snd, strlen(snd)) < 0) { +- char status[STATUS_MAX]; +- snprintf(status, STATUS_MAX, +- "ERROR: Could not write to sound pipe. Stopping sound."); +- gui->WriteStatus(status); +- +- return 0; +- } +- +- return 1; +-} +- +-int SayText(string in_text) { +- char snd[1024]; +- +- snprintf(snd, 1024, "%s\n", in_text.c_str()); +- +- if (write(speechpair[1], snd, strlen(snd)) < 0) { +- char status[STATUS_MAX]; +- snprintf(status, STATUS_MAX, +- "ERROR: Could not write to speech pipe. Stopping speech."); +- gui->WriteStatus(status); +- +- return 0; +- } +- +- return 1; +-} + + int main(int argc, char *argv[]) { + exec_name = argv[0]; +@@ -345,8 +120,6 @@ + char guihost[1024]; + int guiport = -1; + +- int gpsmode = -1; +- + configfile = NULL; + uiconfigfile = NULL; + +@@ -391,7 +164,6 @@ + fprintf(stderr, "Using alternate UI config file: %s\n", uiconfigfile); + break; + case 'q': +- sound = 0; + break; + case 'g': + reqgui = strdup(optarg); +@@ -515,70 +287,6 @@ + server = strdup(gui_conf->FetchOpt("host").c_str()); + } + +- if (gui_conf->FetchOpt("sound") == "true" && sound == -1) { +- if (gui_conf->FetchOpt("soundplay") != "") { +- sndplay = gui_conf->FetchOpt("soundplay"); +- sound = 1; +- +- if (gui_conf->FetchOpt("soundopts") != "") +- sndplay += " " + gui_conf->FetchOpt("soundopts"); +- +- if (gui_conf->FetchOpt("sound_new") != "") +- wav_map["new"] = gui_conf->FetchOpt("sound_new"); +- if (gui_conf->FetchOpt("sound_new_wep") != "") +- wav_map["new_wep"] = gui_conf->FetchOpt("sound_new_wep"); +- if (gui_conf->FetchOpt("sound_traffic") != "") +- wav_map["traffic"] = gui_conf->FetchOpt("sound_traffic"); +- if (gui_conf->FetchOpt("sound_junktraffic") != "") +- wav_map["junktraffic"] = gui_conf->FetchOpt("sound_junktraffic"); +- if (gui_conf->FetchOpt("sound_gpslock") != "") +- wav_map["gpslock"] = gui_conf->FetchOpt("sound_gpslock"); +- if (gui_conf->FetchOpt("sound_gpslost") != "") +- wav_map["gpslost"] = gui_conf->FetchOpt("sound_gpslost"); +- if (gui_conf->FetchOpt("sound_alert") != "") +- wav_map["alert"] = gui_conf->FetchOpt("sound_alert"); +- +- } else { +- fprintf(stderr, "ERROR: Sound alerts enabled but no sound playing binary specified.\n"); +- sound = 0; +- } +- } else if (sound == -1) +- sound = 0; +- +- /* Added by Shaw Innes 17/2/02 */ +- if (gui_conf->FetchOpt("speech") == "true" && speech == -1) { +- if (gui_conf->FetchOpt("festival") != "") { +- festival = strdup(gui_conf->FetchOpt("festival").c_str()); +- speech = 1; +- +- if (gui_conf->FetchOpt("flite") == "true") +- flite = 1; +- +- string speechtype = gui_conf->FetchOpt("speech_type"); +- +- if (!strcasecmp(speechtype.c_str(), "nato")) +- speech_encoding = SPEECH_ENCODING_NATO; +- else if (!strcasecmp(speechtype.c_str(), "spell")) +- speech_encoding = SPEECH_ENCODING_SPELL; +- else +- speech_encoding = SPEECH_ENCODING_NORMAL; +- +- // Make sure we have encrypted text lines +- if (gui_conf->FetchOpt("speech_encrypted") == "" || gui_conf->FetchOpt("speech_unencrypted") == "") { +- fprintf(stderr, "ERROR: Speech request but speech_encrypted or speech_unencrypted line missing.\n"); +- speech = 0; +- } +- +- speech_sentence_encrypted = gui_conf->FetchOpt("speech_encrypted"); +- speech_sentence_unencrypted = gui_conf->FetchOpt("speech_unencrypted"); +- +- } else { +- fprintf(stderr, "ERROR: Speech alerts enabled but no path to festival has been specified.\n"); +- speech = 0; +- } +- } else if (speech == -1) +- speech = 0; +- + if (gui_conf->FetchOpt("decay") != "") { + if (sscanf(gui_conf->FetchOpt("decay").c_str(), "%d", &decay) != 1) { + fprintf(stderr, "FATAL: Illegal config file value for decay.\n"); +@@ -636,45 +344,6 @@ + } + } + +- // Fork and find the sound options +- if (sound) { +- if (pipe(soundpair) == -1) { +- fprintf(stderr, "WARNING: Unable to create pipe for audio. Disabling sound.\n"); +- sound = 0; +- } else { +- soundpid = fork(); +- +- if (soundpid < 0) { +- fprintf(stderr, "WARNING: Unable to fork for audio. Disabling sound.\n"); +- sound = 0; +- } else if (soundpid == 0) { +- SoundHandler(soundpair, sndplay.c_str(), wav_map); +- exit(0); +- } +- +- close(soundpair[0]); +- } +- } +- +- if (speech) { +- if (pipe(speechpair) == -1) { +- fprintf(stderr, "WARNING: Unable to create pipe for speech. Disabling speech.\n"); +- speech = 0; +- } else { +- speechpid = fork(); +- +- if (speechpid < 0) { +- fprintf(stderr, "WARNING: Unable to fork for speech. Disabling speech.\n"); +- speech = 0; +- } else if (speechpid == 0) { +- SpeechHandler(speechpair, festival); +- exit(0); +- } +- +- close(speechpair[0]); +- } +- } +- + if (kismet_serv.Connect(guiport, guihost) < 0) { + fprintf(stderr, "FATAL: Could not connect to %s:%d.\n", guihost, guiport); + CatchShutdown(-1); +@@ -884,53 +553,13 @@ + } + + if (pollret != 0) { +- if (pollret == CLIENT_ALERT) +- if (sound == 1) +- sound = PlaySound("alert"); +- + if (strlen(tcpcli->FetchStatus()) != 0) { + gui->WriteStatus(tcpcli->FetchStatus()); + // gui->DrawDisplay(); + } + +- // The GPS only gets updated for the primary client +- if (tcpcli == primary_client) { +- if (tcpcli->FetchMode() == 0 && gpsmode != 0) { +- if (sound == 1 && gpsmode != -1) +- sound = PlaySound("gpslost"); +- gpsmode = 0; +- } else if (tcpcli->FetchMode() != 0 && gpsmode == 0) { +- if (sound == 1 && gpsmode != -1) +- sound = PlaySound("gpslock"); +- gpsmode = 1; +- } +- } +- + if (tcpcli->FetchDeltaNumNetworks() > 0) { + wireless_network *newnet = tcpcli->FetchLastNewNetwork(); +- +- if (sound == 1 && newnet != lastspoken) { +- if (newnet->crypt_set && +- wav_map.find("new_wep") != wav_map.end()) +- sound = PlaySound("new_wep"); +- else +- sound = PlaySound("new"); +- } +- +- if (speech == 1 && newnet != lastspoken) { +- string text; +- +- if (newnet != NULL) { +- if (newnet->crypt_set) +- text = ExpandSpeechString(speech_sentence_encrypted, newnet, speech_encoding); +- else +- text = ExpandSpeechString(speech_sentence_unencrypted, newnet, speech_encoding); +- +- speech = SayText(text.c_str()); +- } +- } +- +- lastspoken = newnet; + } + + num_networks += tcpcli->FetchNumNetworks(); +@@ -938,17 +567,7 @@ + num_noise += tcpcli->FetchNumNoise(); + num_dropped += tcpcli->FetchNumDropped(); + +- if (tcpcli->FetchDeltaNumPackets() != 0) { +- if (time(0) - last_click >= decay && sound == 1) { +- if (tcpcli->FetchDeltaNumPackets() > tcpcli->FetchDeltaNumDropped()) { +- sound = PlaySound("traffic"); +- } else { +- sound = PlaySound("junktraffic"); +- } +- +- last_click = time(0); +- } +- } ++ tcpcli->FetchDeltaNumPackets(); + } + } + } else { +diff -urN kismet.dev/kismet_drone.cc kismet.dev2/kismet_drone.cc +--- kismet.dev/kismet_drone.cc 2006-04-13 00:42:59.000000000 +0200 ++++ kismet.dev2/kismet_drone.cc 2006-04-14 20:21:46.000000000 +0200 +@@ -32,16 +32,11 @@ + #include "packet.h" + + #include "packetsource.h" +-#include "prism2source.h" + #include "pcapsource.h" +-#include "wtapfilesource.h" +-#include "wsp100source.h" +-#include "vihasource.h" + #include "dronesource.h" + #include "packetsourcetracker.h" + #include "kis_packsources.h" + +-#include "gpsd.h" + #include "tcpstreamer.h" + #include "configfile.h" + +@@ -53,10 +48,6 @@ + + const char *config_base = "kismet_drone.conf"; + +-GPSD *gps = NULL; +-int gpsmode = 0; +-int gps_enable = 0; +- + // Unused, only here to make packetsourcetracker link + int retain_monitor = 0; + +@@ -84,26 +75,6 @@ + exit(0); + } + +-int GpsEvent(Timetracker::timer_event *evt, void *parm) { +- // The GPS only provides us a new update once per second we might +- // as well only update it here once a second +- if (gps_enable) { +- int gpsret; +- gpsret = gps->Scan(); +- if (gpsret < 0) { +- if (!silent) +- fprintf(stderr, "GPS error fetching data: %s\n", +- gps->FetchError()); +- +- gps_enable = 0; +- } +- +- } +- +- // We want to be rescheduled +- return 1; +-} +- + // Handle channel hopping... this is actually really simple. + int ChannelHopEvent(Timetracker::timer_event *evt, void *parm) { + sourcetracker.AdvanceChannel(); +@@ -151,9 +122,6 @@ + + TcpStreamer streamer; + +- char gpshost[1024]; +- int gpsport = -1; +- + int channel_hop = -1; + int channel_velocity = 1; + int channel_dwell = 0; +@@ -354,46 +322,6 @@ + exit(1); + } + +- if (conf->FetchOpt("gps") == "true") { +- if (sscanf(conf->FetchOpt("gpshost").c_str(), "%1023[^:]:%d", gpshost, &gpsport) != 2) { +- fprintf(stderr, "Invalid GPS host in config (host:port required)\n"); +- exit(1); +- } +- +- gps_enable = 1; +- } else { +- gps_enable = 0; +- } +- +- if (gps_enable == 1) { +- // Open the GPS +- gps = new GPSD(gpshost, gpsport); +- +- // Lock GPS position +- if (conf->FetchOpt("gpsmodelock") == "true") { +- fprintf(stderr, "Enabling GPS position lock override (broken GPS unit reports 0 always)\n"); +- gps->SetOptions(GPSD_OPT_FORCEMODE); +- } +- +- if (gps->OpenGPSD() < 0) { +- fprintf(stderr, "%s\n", gps->FetchError()); +- +- gps_enable = 0; +- } else { +- fprintf(stderr, "Opened GPS connection to %s port %d\n", +- gpshost, gpsport); +- +- } +- } +- +- // Update GPS coordinates and handle signal loss if defined +- timetracker.RegisterTimer(SERVER_TIMESLICES_SEC, NULL, 1, &GpsEvent, NULL); +- +- // Add the GPS to the tcpstreamer +- streamer.AddGpstracker(gps); +- +- // Register the gps and timetracker with the sourcetracker +- sourcetracker.AddGpstracker(gps); + sourcetracker.AddTimetracker(&timetracker); + + // Register the sources +diff -urN kismet.dev/kismet_server.cc kismet.dev2/kismet_server.cc +--- kismet.dev/kismet_server.cc 2006-04-13 00:42:59.000000000 +0200 ++++ kismet.dev2/kismet_server.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -37,11 +37,7 @@ + #include "packet.h" + + #include "packetsource.h" +-#include "prism2source.h" + #include "pcapsource.h" +-#include "wtapfilesource.h" +-#include "wsp100source.h" +-#include "vihasource.h" + #include "dronesource.h" + #include "packetsourcetracker.h" + #include "kis_packsources.h" +@@ -51,15 +47,11 @@ + #include "wtaplocaldump.h" + #include "airsnortdump.h" + #include "fifodump.h" +-#include "gpsdump.h" +- +-#include "gpsd.h" + + #include "packetracker.h" + #include "timetracker.h" + #include "alertracker.h" + +-#include "speech.h" + #include "tcpserver.h" + #include "server_globals.h" + #include "kismet_server.h" +@@ -89,17 +81,8 @@ + Alertracker alertracker; + Timetracker timetracker; + +-GPSD *gps = NULL; +-int gpsmode = 0; +-GPSDump gpsdump; +- +-// Last time we tried to reconnect to the gps +-time_t last_gpsd_reconnect = 0; +-int gpsd_reconnect_attempt = 0; +- + FifoDumpFile fifodump; + TcpServer ui_server; +-int sound = -1; + packet_info last_info; + int decay; + channel_power channel_graph[CHANNEL_MAX]; +@@ -112,11 +95,8 @@ + // Wep keys + macmap bssid_wep_map; + +-// Pipe file descriptor pairs and fd's +-int soundpair[2]; +-int speechpair[2]; + int chanpair[2]; +-pid_t soundpid = -1, speechpid = -1, chanpid = -1; ++pid_t chanpid = -1; + + // Past alerts + unsigned int max_alerts = 50; +@@ -177,17 +157,6 @@ + int tcpport = -1; + int tcpmax; + +-//const char *sndplay = NULL; +-string sndplay; +- +-const char *festival = NULL; +-int speech = -1; +-int flite = 0; +-int speech_encoding = 0; +-string speech_sentence_encrypted, speech_sentence_unencrypted; +- +-map wav_map; +- + int beacon_log = 1; + int phy_log = 1; + int mangle_log = 0; +@@ -348,17 +317,6 @@ + // delete cryptfile; + } + +- if (gps_log == 1) { +- if (gpsdump.CloseDump(1) < 0) +- fprintf(stderr, "Didn't log any GPS coordinates, unlinking gps file\n"); +- } +- +- // Kill our sound players +- if (soundpid > 0) +- kill(soundpid, 9); +- if (speechpid > 0) +- kill(speechpid, 9); +- + // Shut down the packet sources + sourcetracker.CloseSources(); + +@@ -369,228 +327,10 @@ + exit(0); + } + +-// Subprocess sound handler +-void SoundHandler(int *fds, const char *player, map soundmap) { +- int read_sock = fds[0]; +- close(fds[1]); +- +- fd_set rset; +- +- char data[1024]; +- +- pid_t sndpid = -1; +- int harvested = 1; +- +- while (1) { +- FD_ZERO(&rset); +- FD_SET(read_sock, &rset); +- char *end; +- +- memset(data, 0, 1024); +- +- struct timeval tm; +- tm.tv_sec = 1; +- tm.tv_usec = 0; +- +- if (select(read_sock + 1, &rset, NULL, NULL, &tm) < 0) { +- if (errno != EINTR) { +- exit(1); +- } +- } +- +- if (harvested == 0) { +- // We consider a wait error to be a sign that the child pid died +- // so we flag it as harvested and keep on going +- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG); +- if (harvestpid == -1 || harvestpid == sndpid) +- harvested = 1; +- } +- +- if (FD_ISSET(read_sock, &rset)) { +- int ret; +- ret = read(read_sock, data, 1024); +- +- // We'll die off if we get a read error, and we'll let kismet on the +- // other side detact that it died +- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE)) +- exit(1); +- +- if ((end = strstr(data, "\n")) == NULL) +- continue; +- +- end[0] = '\0'; +- } +- +- if (data[0] == '\0') +- continue; +- +- +- // If we've harvested the process, spawn a new one and watch it +- // instead. Otherwise, we just let go of the data we read +- if (harvested == 1) { +- // Only take the first line +- char *nl; +- if ((nl = strchr(data, '\n')) != NULL) +- *nl = '\0'; +- +- // Make sure it's shell-clean +- +- char snd[1024]; +- +- if (soundmap.size() == 0) +- snprintf(snd, 1024, "%s", data); +- if (soundmap.find(data) != soundmap.end()) +- snprintf(snd, 1024, "%s", soundmap[data].c_str()); +- else +- continue; +- +- char plr[1024]; +- snprintf(plr, 1024, "%s", player); +- +- harvested = 0; +- if ((sndpid = fork()) == 0) { +- // Suppress errors +- if (silent) { +- int nulfd = open("/dev/null", O_RDWR); +- dup2(nulfd, 1); +- dup2(nulfd, 2); +- } +- +- char * const echoarg[] = { plr, snd, NULL }; +- execve(echoarg[0], echoarg, NULL); +- } +- } +- data[0] = '\0'; +- } +-} +- +-// Subprocess speech handler +-void SpeechHandler(int *fds, const char *player) { +- int read_sock = fds[0]; +- close(fds[1]); +- +- fd_set rset; +- +- char data[1024]; +- +- pid_t sndpid = -1; +- int harvested = 1; +- +- while (1) { +- FD_ZERO(&rset); +- FD_SET(read_sock, &rset); +- //char *end; +- +- memset(data, 0, 1024); +- +- if (harvested == 0) { +- // We consider a wait error to be a sign that the child pid died +- // so we flag it as harvested and keep on going +- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG); +- if (harvestpid == -1 || harvestpid == sndpid) +- harvested = 1; +- } +- +- struct timeval tm; +- tm.tv_sec = 1; +- tm.tv_usec = 0; +- +- if (select(read_sock + 1, &rset, NULL, NULL, &tm) < 0) { +- if (errno != EINTR) { +- exit(1); +- } +- } +- +- if (FD_ISSET(read_sock, &rset)) { +- int ret; +- ret = read(read_sock, data, 1024); +- +- // We'll die off if we get a read error, and we'll let kismet on the +- // other side detact that it died +- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE)) +- exit(1); +- +- data[ret] = '\0'; +- } +- +- if (data[0] == '\0') +- continue; +- +- // If we've harvested the process, spawn a new one and watch it +- // instead. Otherwise, we just let go of the data we read +- if (harvested == 1) { +- harvested = 0; +- if ((sndpid = fork()) == 0) { +- // Only take the first line +- char *nl; +- if ((nl = strchr(data, '\n')) != NULL) +- *nl = '\0'; +- +- // Make sure it's shell-clean +- MungeToShell(data, strlen(data)); +- char spk_call[1024]; +- snprintf(spk_call, 1024, "echo \"(%s\\\"%s\\\")\" | %s " +- ">/dev/null 2>/dev/null", +- flite ? "" : "SayText ", data, player); +- system(spk_call); +- +- exit(0); +- } +- } +- +- data[0] = '\0'; +- } +-} +- +- +-// Fork and run a system call to play a sound +-int PlaySound(string in_sound) { +- +- char snd[1024]; +- +- snprintf(snd, 1024, "%s\n", in_sound.c_str()); +- +- if (write(soundpair[1], snd, strlen(snd)) < 0) { +- char status[STATUS_MAX]; +- if (!silent) +- fprintf(stderr, "ERROR: Write error, closing sound pipe.\n"); +- snprintf(status, STATUS_MAX, "ERROR: Write error on sound pipe, closing sound connection"); +- NetWriteStatus(status); +- +- return 0; +- } +- +- return 1; +-} +- +-int SayText(string in_text) { +- +- char snd[1024]; +- +- snprintf(snd, 1024, "%s\n", in_text.c_str()); +- MungeToShell(snd, 1024); +- +- if (write(speechpair[1], snd, strlen(snd)) < 0) { +- char status[STATUS_MAX]; +- if (!silent) +- fprintf(stderr, "ERROR: Write error, closing speech pipe.\n"); +- snprintf(status, STATUS_MAX, "ERROR: Write error on speech pipe, closing speech connection"); +- NetWriteStatus(status); +- +- return 0; +- } +- +- return 1; +-} +- + void KisLocalAlert(const char *in_text) { + time_t now = time(0); + if (!silent) + fprintf(stderr, "ALERT %.24s %s\n", ctime(&now), in_text); +- +- if (sound == 1) +- sound = PlaySound("alert"); +- + } + + void KisLocalStatus(const char *in_status) { +@@ -639,37 +379,6 @@ + + char tmpstr[32]; + +- GPS_data gdata; +- +- if (gps_enable) { +- float lat, lon, alt, spd, hed; +- int mode; +- +- gps->FetchLoc(&lat, &lon, &alt, &spd, &hed, &mode); +- +- snprintf(tmpstr, 32, "%f", lat); +- gdata.lat = tmpstr; +- snprintf(tmpstr, 32, "%f", lon); +- gdata.lon = tmpstr; +- snprintf(tmpstr, 32, "%f", alt); +- gdata.alt = tmpstr; +- snprintf(tmpstr, 32, "%f", spd); +- gdata.spd = tmpstr; +- snprintf(tmpstr, 32, "%f", hed); +- gdata.heading = tmpstr; +- snprintf(tmpstr, 32, "%d", mode); +- gdata.mode = tmpstr; +- } else { +- gdata.lat = "0.0"; +- gdata.lon = "0.0"; +- gdata.alt = "0.0"; +- gdata.spd = "0.0"; +- gdata.heading = "0.0"; +- gdata.mode = "0"; +- } +- +- ui_server.SendToAll(gps_ref, (void *) &gdata); +- + INFO_data idata; + snprintf(tmpstr, 32, "%d", tracker.FetchNumNetworks()); + idata.networks = tmpstr; +@@ -790,81 +499,6 @@ + } + } + +-int GpsEvent(Timetracker::timer_event *evt, void *parm) { +- char status[STATUS_MAX]; +- +- // The GPS only provides us a new update once per second we might +- // as well only update it here once a second +- +- // If we're disconnected, try to reconnect. +- if (gpsd_reconnect_attempt > 0) { +- // Increment the time between connection attempts +- if (last_gpsd_reconnect + ((gpsd_reconnect_attempt - 1) * 2) < time(0)) { +- if (gps->OpenGPSD() < 0) { +- last_gpsd_reconnect = time(0); +- +- if (gpsd_reconnect_attempt < 20) +- gpsd_reconnect_attempt++; +- +- snprintf(status, STATUS_MAX, "Unable to reconnect to GPSD, trying " +- "again in %d seconds.", ((gpsd_reconnect_attempt - 1) * 2)); +- +- if (!silent || NetWriteStatus(status) == 0) +- fprintf(stderr, "WARNING: %s\n", status); +- +- return 1; +- } else { +- gpsd_reconnect_attempt = 0; +- +- snprintf(status, STATUS_MAX, "Reopened connection to GPSD"); +- if (!silent || NetWriteStatus(status) == 0) +- fprintf(stderr, "NOTICE: %s\n", status); +- } +- } else { +- // Don't process more if we haven't woken up yet +- return 1; +- } +- +- } +- +- if (gps_enable) { +- int gpsret; +- gpsret = gps->Scan(); +- +- if (gpsret < 0) { +- snprintf(status, STATUS_MAX, "GPS error requesting data: %s", +- gps->FetchError()); +- +- if (!silent || NetWriteStatus(status) == 0) +- fprintf(stderr, "WARNING: %s\n", status); +- +- gpsd_reconnect_attempt = 1; +- } +- +- if (gpsret == 0 && gpsmode != 0) { +- if (!silent || NetWriteStatus("Lost GPS signal.") == 0) +- fprintf(stderr, "Lost GPS signal.\n"); +- if (sound == 1) +- sound = PlaySound("gpslost"); +- +- gpsmode = 0; +- } else if (gpsret != 0 && gpsmode == 0) { +- if (!silent || NetWriteStatus("Acquired GPS signal.") == 0) +- fprintf(stderr, "Acquired GPS signal.\n"); +- if (sound == 1) +- sound = PlaySound("gpslock"); +- +- gpsmode = 1; +- } +- } +- +- if (gps_log == 1 && gpsmode != 0 && gps != NULL) { +- gpsdump.DumpTrack(gps); +- } +- +- // We want to be rescheduled +- return 1; +-} + + // Simple redirect to the network info drawer. We don't want to change netwriteinfo to a + // timer event since we call it un-timed too +@@ -885,13 +519,6 @@ + return 1; + } + +-// Write the waypoints for gpsdrive +-int WaypointSyncEvent(Timetracker::timer_event *evt, void *parm) { +- tracker.WriteGpsdriveWaypt(waypoint_file); +- +- return 1; +-} +- + // Handle tracker maintenance + int TrackerTickEvent(Timetracker::timer_event *evt, void *parm) { + tracker.Tick(); +@@ -1160,11 +787,9 @@ + " -c, --capture-source Packet capture source line (type,interface,name)\n" + " -C, --enable-capture-sources Comma separated list of named packet sources to use.\n" + " -l, --log-types Comma separated list of types to log,\n" +- " (ie, dump,cisco,weak,network,gps)\n" ++ " (ie, dump,cisco,weak,network)\n" + " -d, --dump-type Dumpfile type (wiretap)\n" + " -m, --max-packets Maximum number of packets before starting new dump\n" +- " -q, --quiet Don't play sounds\n" +- " -g, --gps GPS server (host:port or off)\n" + " -p, --port TCPIP server port for GUI connections\n" + " -a, --allowed-hosts Comma separated list of hosts allowed to connect\n" + " -b, --bind-address
Bind to this address. Default INADDR_ANY\n." +@@ -1289,23 +914,6 @@ + ip_track = 1; + } + +- +- if (conf->FetchOpt("waypoints") == "true") { +- if(conf->FetchOpt("waypointdata") == "") { +- fprintf(stderr, "WARNING: Waypoint logging requested but no waypoint data file given.\n" +- "Waypoint logging will be disabled.\n"); +- waypoint = 0; +- } else { +- waypointfile = conf->ExpandLogPath(conf->FetchOpt("waypointdata"), "", "", 0, 1); +- waypoint = 1; +- } +- if(conf->FetchOpt("waypoint_essid") == "true") { +- waypointformat = 1; +- } else { +- waypointformat = 0; +- } +- } +- + if (conf->FetchOpt("metric") == "true") { + fprintf(stderr, "Using metric measurements.\n"); + metric = 1; +@@ -1423,26 +1031,6 @@ + } + + } +- +- if (strstr(logtypes, "gps")) { +- if (gps_log == 0) { +- fprintf(stderr, "WARNING: Disabling GPS logging.\n"); +- } else { +- gps_log = 1; +- +- if (conf->FetchOpt("logtemplate") == "") { +- fprintf(stderr, "FATAL: Logging (gps coordinates) enabled but no logtemplate given in config.\n"); +- ErrorShutdown(); +- } +- } +- +- } +- +- if (gps_log == 1 && !net_log) { +- fprintf(stderr, "WARNING: Logging (gps coordinates) enabled but XML logging (networks) was not.\n" +- "It will be enabled now.\n"); +- xml_log = 1; +- } + } + + if (conf->FetchOpt("decay") != "") { +@@ -1563,72 +1151,6 @@ + legal_ipblock_vec.push_back(ipb); + } + +- // Process sound stuff +- if (conf->FetchOpt("sound") == "true" && sound == -1) { +- if (conf->FetchOpt("soundplay") != "") { +- sndplay = conf->FetchOpt("soundplay"); +- +- if (conf->FetchOpt("soundopts") != "") +- sndplay += " " + conf->FetchOpt("soundopts"); +- +- sound = 1; +- +- if (conf->FetchOpt("sound_new") != "") +- wav_map["new"] = conf->FetchOpt("sound_new"); +- if (conf->FetchOpt("sound_new_wep") != "") +- wav_map["new_wep"] = conf->FetchOpt("sound_new_wep"); +- if (conf->FetchOpt("sound_traffic") != "") +- wav_map["traffic"] = conf->FetchOpt("sound_traffic"); +- if (conf->FetchOpt("sound_junktraffic") != "") +- wav_map["junktraffic"] = conf->FetchOpt("sound_traffic"); +- if (conf->FetchOpt("sound_gpslock") != "") +- wav_map["gpslock"] = conf->FetchOpt("sound_gpslock"); +- if (conf->FetchOpt("sound_gpslost") != "") +- wav_map["gpslost"] = conf->FetchOpt("sound_gpslost"); +- if (conf->FetchOpt("sound_alert") != "") +- wav_map["alert"] = conf->FetchOpt("sound_alert"); +- +- } else { +- fprintf(stderr, "ERROR: Sound alerts enabled but no sound playing binary specified.\n"); +- sound = 0; +- } +- } else if (sound == -1) +- sound = 0; +- +- /* Added by Shaw Innes 17/2/02 */ +- /* Modified by Andrew Etter 15/9/02 */ +- if (conf->FetchOpt("speech") == "true" && speech == -1) { +- if (conf->FetchOpt("festival") != "") { +- festival = strdup(conf->FetchOpt("festival").c_str()); +- speech = 1; +- +- if (conf->FetchOpt("flite") == "true") +- flite = 1; +- +- string speechtype = conf->FetchOpt("speech_type"); +- +- if (!strcasecmp(speechtype.c_str(), "nato")) +- speech_encoding = SPEECH_ENCODING_NATO; +- else if (!strcasecmp(speechtype.c_str(), "spell")) +- speech_encoding = SPEECH_ENCODING_SPELL; +- else +- speech_encoding = SPEECH_ENCODING_NORMAL; +- +- // Make sure we have encrypted text lines +- if (conf->FetchOpt("speech_encrypted") == "" || conf->FetchOpt("speech_unencrypted") == "") { +- fprintf(stderr, "ERROR: Speech request but speech_encrypted or speech_unencrypted line missing.\n"); +- speech = 0; +- } +- +- speech_sentence_encrypted = conf->FetchOpt("speech_encrypted"); +- speech_sentence_unencrypted = conf->FetchOpt("speech_unencrypted"); +- } else { +- fprintf(stderr, "ERROR: Speech alerts enabled but no path to festival has been specified.\n"); +- speech = 0; +- } +- } else if (speech == -1) +- speech = 0; +- + if (conf->FetchOpt("writeinterval") != "") { + if (sscanf(conf->FetchOpt("writeinterval").c_str(), "%d", &datainterval) != 1) { + fprintf(stderr, "FATAL: Illegal config file value for data interval.\n"); +@@ -1648,45 +1170,6 @@ + fprintf(stderr, "WARNING: No client_manuf file specified. Client manufacturers will not be detected.\n"); + } + +- // Fork and find the sound options +- if (sound) { +- if (pipe(soundpair) == -1) { +- fprintf(stderr, "WARNING: Unable to create pipe for audio. Disabling sound.\n"); +- sound = 0; +- } else { +- soundpid = fork(); +- +- if (soundpid < 0) { +- fprintf(stderr, "WARNING: Unable to fork for audio. Disabling sound.\n"); +- sound = 0; +- } else if (soundpid == 0) { +- SoundHandler(soundpair, sndplay.c_str(), wav_map); +- exit(0); +- } +- +- close(soundpair[0]); +- } +- } +- +- if (speech) { +- if (pipe(speechpair) == -1) { +- fprintf(stderr, "WARNING: Unable to create pipe for speech. Disabling speech.\n"); +- speech = 0; +- } else { +- speechpid = fork(); +- +- if (speechpid < 0) { +- fprintf(stderr, "WARNING: Unable to fork for speech. Disabling speech.\n"); +- speech = 0; +- } else if (speechpid == 0) { +- SpeechHandler(speechpair, festival); +- exit(0); +- } +- +- close(speechpair[0]); +- } +- } +- + // Grab the filtering + string filter_bit; + +@@ -1712,7 +1195,7 @@ + } + + if ((filter_bit = conf->FetchOpt("filter_export")) != "") { +- fprintf(stderr, "Enabling filtering on exported (csv, xml, network, gps) files.\n"); ++ fprintf(stderr, "Enabling filtering on exported (csv, xml, network) files.\n"); + filter_export = 1; + if (ConfigFile::ParseFilterLine(filter_bit, &filter_export_bssid, &filter_export_source, + &filter_export_dest, &filter_export_bssid_invert, +@@ -1818,14 +1301,6 @@ + + } + +- if (waypoint) { +- if ((waypoint_file = fopen(waypointfile.c_str(), "a")) == NULL) { +- fprintf(stderr, "WARNING: Could not open waypoint file '%s' for writing: %s\n", +- waypointfile.c_str(), strerror(errno)); +- waypoint = 0; +- } +- } +- + // Create all the logs and title/number them appropriately + // We need to save this for after we toast the conf record + int logfile_matched = 0; +@@ -1873,13 +1348,6 @@ + continue; + } + +- if (gps_log == 1) { +- gpslogfile = conf->ExpandLogPath(conf->FetchOpt("logtemplate"), logname, "gps", run_num); +- +- if (gpslogfile == "") +- continue; +- } +- + // if we made it this far we're cool -- all the logfiles we're writing to matched + // this number + logfile_matched = 1; +@@ -1908,9 +1376,6 @@ + if (cisco_log) + fprintf(stderr, "Logging cisco product information to %s\n", ciscologfile.c_str()); + +- if (gps_log == 1) +- fprintf(stderr, "Logging gps coordinates to %s\n", gpslogfile.c_str()); +- + if (data_log) + fprintf(stderr, "Logging data to %s\n", dumplogfile.c_str()); + +@@ -2058,7 +1523,6 @@ + { "dump-type", required_argument, 0, 'd' }, + { "max-packets", required_argument, 0, 'm' }, + { "quiet", no_argument, 0, 'q' }, +- { "gps", required_argument, 0, 'g' }, + { "port", required_argument, 0, 'p' }, + { "allowed-hosts", required_argument, 0, 'a' }, + { "bind-address", required_argument, 0, 'b'}, +@@ -2140,18 +1604,6 @@ + Usage(argv[0]); + } + break; +- case 'g': +- // GPS +- if (strcmp(optarg, "off") == 0) { +- gps_enable = 0; +- } +- else if (sscanf(optarg, "%1023[^:]:%d", gpshost, &gpsport) < 2) { +- fprintf(stderr, "Invalid GPS host '%s' (host:port or off required)\n", +- optarg); +- gps_enable = 1; +- Usage(argv[0]); +- } +- break; + case 'p': + // Port + if (sscanf(optarg, "%d", &tcpport) != 1) { +@@ -2173,7 +1625,6 @@ + break; + case 'q': + // Quiet +- sound = 0; + break; + case 'v': + // version +@@ -2331,39 +1782,6 @@ + // And we're done + fclose(pid_file); + +- +- // Set up the GPS object to give to the children +- if (gpsport == -1 && gps_enable) { +- if (conf->FetchOpt("gps") == "true") { +- if (sscanf(conf->FetchOpt("gpshost").c_str(), "%1023[^:]:%d", gpshost, +- &gpsport) != 2) { +- fprintf(stderr, "Invalid GPS host in config (host:port required)\n"); +- exit(1); +- } +- +- gps_enable = 1; +- } else { +- gps_enable = 0; +- gps_log = 0; +- } +- } +- +- if (gps_enable == 1) { +- gps = new GPSD(gpshost, gpsport); +- +- // Lock GPS position +- if (conf->FetchOpt("gpsmodelock") == "true") { +- fprintf(stderr, "Enabling GPS position lock override (broken GPS unit " +- "reports 0 always)\n"); +- gps->SetOptions(GPSD_OPT_FORCEMODE); +- } +- +- } else { +- gps_log = 0; +- } +- +- // Register the gps and timetracker with the sourcetracker +- sourcetracker.AddGpstracker(gps); + sourcetracker.AddTimetracker(&timetracker); + + // Handle errors here maybe in the future +@@ -2530,13 +1948,6 @@ + fprintf(stderr, "Dump file format: %s\n", dumpfile->FetchType()); + } + +- if (gps_enable && gps_log == 1) { +- if (gpsdump.OpenDump(gpslogfile.c_str(), xmllogfile.c_str()) < 0) { +- fprintf(stderr, "FATAL: GPS dump error: %s\n", gpsdump.FetchError()); +- ErrorShutdown(); +- } +- } +- + // Open our files first to make sure we can, we'll unlink the empties later. + FILE *testfile = NULL; + if (net_log) { +@@ -2608,14 +2019,13 @@ + */ + + if (data_log || net_log || crypt_log) { +- snprintf(status, STATUS_MAX, "Logging%s%s%s%s%s%s%s", ++ snprintf(status, STATUS_MAX, "Logging%s%s%s%s%s%s", + data_log ? " data" : "" , + net_log ? " networks" : "" , + csv_log ? " CSV" : "" , + xml_log ? " XML" : "" , + crypt_log ? " weak" : "", +- cisco_log ? " cisco" : "", +- gps_log == 1 ? " gps" : ""); ++ cisco_log ? " cisco" : ""); + fprintf(stderr, "%s\n", status); + } else if (no_log) { + snprintf(status, STATUS_MAX, "Not logging any data."); +@@ -2633,23 +2043,6 @@ + } + } + +- if (gps_enable) { +- // Open the GPS +- if (gps->OpenGPSD() < 0) { +- fprintf(stderr, "%s\n", gps->FetchError()); +- +- gps_enable = 0; +- gps_log = 0; +- } else { +- fprintf(stderr, "Opened GPS connection to %s port %d\n", +- gpshost, gpsport); +- +- gpsmode = gps->FetchMode(); +- +- last_gpsd_reconnect = time(0); +- } +- } +- + fprintf(stderr, "Listening on port %d.\n", tcpport); + for (unsigned int ipvi = 0; ipvi < legal_ipblock_vec.size(); ipvi++) { + char *netaddr = strdup(inet_ntoa(legal_ipblock_vec[ipvi]->network)); +@@ -2690,8 +2083,6 @@ + &Protocol_NETWORK, &ProtocolNetworkEnable); + client_ref = ui_server.RegisterProtocol("CLIENT", 0, CLIENT_fields_text, + &Protocol_CLIENT, &ProtocolClientEnable); +- gps_ref = ui_server.RegisterProtocol("GPS", 0, GPS_fields_text, +- &Protocol_GPS, NULL); + info_ref = ui_server.RegisterProtocol("INFO", 0, INFO_fields_text, + &Protocol_INFO, NULL); + remove_ref = ui_server.RegisterProtocol("REMOVE", 0, REMOVE_fields_text, +@@ -2746,14 +2137,9 @@ + // Write network info and tick the tracker once per second + timetracker.RegisterTimer(SERVER_TIMESLICES_SEC, NULL, 1, &NetWriteEvent, NULL); + timetracker.RegisterTimer(SERVER_TIMESLICES_SEC, NULL, 1, &TrackerTickEvent, NULL); +- // Update GPS coordinates and handle signal loss if defined +- timetracker.RegisterTimer(SERVER_TIMESLICES_SEC, NULL, 1, &GpsEvent, NULL); + // Sync the data files if requested + if (datainterval > 0 && no_log == 0) + timetracker.RegisterTimer(datainterval * SERVER_TIMESLICES_SEC, NULL, 1, &ExportSyncEvent, NULL); +- // Write waypoints if requested +- if (waypoint) +- timetracker.RegisterTimer(decay * SERVER_TIMESLICES_SEC, NULL, 1, &WaypointSyncEvent, NULL); + // Channel hop if requested + if (channel_hop) { + if (channel_dwell) +@@ -2777,7 +2163,6 @@ + snprintf(status, 1024, "%s", TIMESTAMP); + kdata.timestamp = status; + +- time_t last_click = 0; + int num_networks = 0, num_packets = 0, num_noise = 0, num_dropped = 0; + + +@@ -2926,54 +2311,13 @@ + + } + +- if (gps_log == 1 && info.type != packet_noise && +- info.type != packet_unknown && info.type != packet_phy && +- info.corrupt == 0) { +- if (gpsdump.DumpPacket(&info) < 0) { +- snprintf(status, STATUS_MAX, "%s", gpsdump.FetchError()); +- if (!silent || NetWriteStatus(status) == 0) +- fprintf(stderr, "%s\n", status); +- } +- } +- + // tracker.ProcessPacket(info); + tracker.ProcessPacket(&packet, &info, &bssid_wep_map, + wep_identity); + +- if (tracker.FetchNumNetworks() > num_networks) { +- if (sound == 1) +- if (info.crypt_set && +- wav_map.find("new_wep") != wav_map.end()) +- sound = PlaySound("new_wep"); +- else +- sound = PlaySound("new"); +- if (speech == 1) { +- string text; +- +- if (info.crypt_set) +- text = ExpandSpeechString(speech_sentence_encrypted, &info, +- speech_encoding); +- else +- text = ExpandSpeechString(speech_sentence_unencrypted, +- &info, speech_encoding); +- +- speech = SayText(MungeToShell(text).c_str()); +- } +- } + num_networks = tracker.FetchNumNetworks(); + + if (tracker.FetchNumPackets() != num_packets) { +- if (cur_time - last_click >= decay && sound == 1) { +- if (tracker.FetchNumPackets() - num_packets > +- tracker.FetchNumDropped() + localdropnum - num_dropped) { +- sound = PlaySound("traffic"); +- } else { +- sound = PlaySound("junktraffic"); +- } +- +- last_click = cur_time; +- } +- + num_packets = tracker.FetchNumPackets(); + num_noise = tracker.FetchNumNoise(); + num_dropped = tracker.FetchNumDropped() + localdropnum; +diff -urN kismet.dev/kismet_server.h kismet.dev2/kismet_server.h +--- kismet.dev/kismet_server.h 2004-03-07 22:28:01.000000000 +0100 ++++ kismet.dev2/kismet_server.h 2006-04-14 19:31:55.000000000 +0200 +@@ -33,10 +33,6 @@ + void handle_command(TcpServer *tcps, client_command *cc); + int NetWriteStatus(const char *in_status); + void NetWriteInfo(); +-int SayText(string in_text); +-int PlaySound(string in_sound); +-void SpeechHandler(int *fds, const char *player); +-void SoundHandler(int *fds, const char *player, map soundmap); + void ProtocolAlertEnable(int in_fd); + void ProtocolNetworkEnable(int in_fd); + void ProtocolClientEnable(int in_fd); +diff -urN kismet.dev/kis_packsources.cc kismet.dev2/kis_packsources.cc +--- kismet.dev/kis_packsources.cc 2006-04-14 23:43:01.694817572 +0200 ++++ kismet.dev2/kis_packsources.cc 2006-04-14 20:21:12.000000000 +0200 +@@ -64,13 +64,8 @@ + pcapsource_11g_registrant, + monitor_wext, unmonitor_wext, + chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("cisco", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_cisco, unmonitor_cisco, +- chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("cisco_wifix", 1, "IEEE80211b", 6, +- pcapsource_ciscowifix_registrant, +- monitor_cisco_wifix, NULL, NULL, 1); ++ REG_EMPTY_CARD(sourcetracker, "cisco"); ++ REG_EMPTY_CARD(sourcetracker, "cisco_wifix"); + sourcetracker->RegisterPacketsource("hostap", 1, "IEEE80211b", 6, + pcapsource_wext_registrant, + monitor_hostap, unmonitor_hostap, +@@ -83,21 +78,10 @@ + pcapsource_wext_registrant, + monitor_orinoco, unmonitor_orinoco, + chancontrol_orinoco, 1); +- sourcetracker->RegisterPacketsource("acx100", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_acx100, unmonitor_acx100, +- chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("admtek", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_admtek, unmonitor_admtek, +- chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("vtar5k", 1, "IEEE80211a", 36, +- pcapsource_wext_registrant, +- monitor_vtar5k, NULL, chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("atmel_usb", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_wext, unmonitor_wext, +- chancontrol_wext, 1); ++ REG_EMPTY_CARD(sourcetracker, "acx100"); ++ REG_EMPTY_CARD(sourcetracker, "admtek"); ++ REG_EMPTY_CARD(sourcetracker, "vtar5k"); ++ REG_EMPTY_CARD(sourcetracker, "atmel_usb"); + + sourcetracker->RegisterPacketsource("madwifi_a", 1, "IEEE80211a", 36, + pcapsource_wextfcs_registrant, +@@ -146,50 +130,17 @@ + monitor_prism54g, unmonitor_prism54g, + chancontrol_prism54g, 1); + +- sourcetracker->RegisterPacketsource("wlanng_wext", 1, "IEEE80211b", 6, +- pcapsource_wlanng_registrant, +- monitor_wlanng_avs, NULL, +- chancontrol_wext, 1); +- +- sourcetracker->RegisterPacketsource("ipw2100", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_ipw2100, unmonitor_ipw2100, +- chancontrol_ipw2100, 1); +- +- sourcetracker->RegisterPacketsource("ipw2200", 1, "IEEE80211g", 6, +- pcapsource_wext_registrant, +- monitor_ipw2200, unmonitor_ipw2200, +- chancontrol_ipw2200, 1); +- +- sourcetracker->RegisterPacketsource("ipw2915", 1, "IEEE80211ab", 6, +- pcapsource_wext_registrant, +- monitor_ipw2200, unmonitor_ipw2200, +- chancontrol_ipw2200, 1); +- +- sourcetracker->RegisterPacketsource("ipw3945", 1, "IEEE80211ab", 6, +- pcapsource_wext_registrant, +- monitor_ipw3945, unmonitor_ipw3945, +- chancontrol_ipw2200, 1); +- +- sourcetracker->RegisterPacketsource("ipwlivetap", 1, "IEEE80211b", 0, +- pcapsource_wext_registrant, +- monitor_ipwlivetap, +- unmonitor_ipwlivetap, +- NULL, 1); +- +- sourcetracker->RegisterPacketsource("rt2400", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_wext, unmonitor_wext, +- chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("rt2500", 1, "IEEE80211g", 6, +- pcapsource_11g_registrant, +- monitor_wext, unmonitor_wext, +- chancontrol_wext, 1); +- sourcetracker->RegisterPacketsource("rt8180", 1, "IEEE80211b", 6, +- pcapsource_wext_registrant, +- monitor_wext, unmonitor_wext, +- chancontrol_wext, 1); ++ REG_EMPTY_CARD(sourcetracker, "wlanng_wext"); ++ REG_EMPTY_CARD(sourcetracker, "ipw2100"); ++ REG_EMPTY_CARD(sourcetracker, "ipw2200"); ++ REG_EMPTY_CARD(sourcetracker, "ipw2915"); ++ REG_EMPTY_CARD(sourcetracker, "ipw3945"); ++ REG_EMPTY_CARD(sourcetracker, "ipwlivetap"); + ++ REG_EMPTY_CARD(sourcetracker, "rt2400"); ++ REG_EMPTY_CARD(sourcetracker, "rt2500"); ++ REG_EMPTY_CARD(sourcetracker, "rt8180"); ++ + sourcetracker->RegisterPacketsource("zd1211", 1, "IEEE80211g", 6, + pcapsource_wext_registrant, + monitor_wext, unmonitor_wext, +@@ -233,31 +184,13 @@ + REG_EMPTY_CARD(sourcetracker, "zd1211"); + #endif + +-#if defined(HAVE_LIBPCAP) && defined(SYS_LINUX) +- sourcetracker->RegisterPacketsource("wlanng", 1, "IEEE80211b", 6, +- pcapsource_wlanng_registrant, +- monitor_wlanng, NULL, chancontrol_wlanng, 1); +- sourcetracker->RegisterPacketsource("wlanng_avs", 1, "IEEE80211b", 6, +- pcapsource_wlanng_registrant, +- monitor_wlanng_avs, NULL, +- chancontrol_wlanng_avs, 1); + sourcetracker->RegisterPacketsource("wrt54g", 1, "na", 0, + pcapsource_wrt54g_registrant, +- monitor_wrt54g, unmonitor_wrt54g, chancontrol_wext, 0); +-#else ++ monitor_wrt54g, unmonitor_wrt54g, chancontrol_wext, 0); ++ + REG_EMPTY_CARD(sourcetracker, "wlanng"); + REG_EMPTY_CARD(sourcetracker, "wlanng_avs"); +- REG_EMPTY_CARD(sourcetracker, "wrt54g"); +-#endif +- +-#if defined(SYS_LINUX) && defined(HAVE_LINUX_NETLINK) +- sourcetracker->RegisterPacketsource("wlanng_legacy", 1, "IEEE80211b", 6, +- prism2source_registrant, +- monitor_wlanng_legacy, NULL, +- chancontrol_wlanng_legacy, 1); +-#else + REG_EMPTY_CARD(sourcetracker, "wlanng_legacy"); +-#endif + + #if defined(HAVE_LIBPCAP) && defined(SYS_OPENBSD) + sourcetracker->RegisterPacketsource("cisco_openbsd", 1, "IEEE80211b", 6, +@@ -291,29 +224,11 @@ + REG_EMPTY_CARD(sourcetracker, "radiotap_bsd_b"); + #endif + +-#if defined(HAVE_LIBWIRETAP) +- sourcetracker->RegisterPacketsource("wtapfile", 0, "na", 0, +- wtapfilesource_registrant, +- NULL, NULL, NULL, 0); +-#else + REG_EMPTY_CARD(sourcetracker, "wtapfile"); +-#endif + +-#if defined(HAVE_WSP100) +- sourcetracker->RegisterPacketsource("wsp100", 0, "IEEE80211b", 6, +- wsp100source_registrant, +- monitor_wsp100, NULL, chancontrol_wsp100, 0); +-#else + REG_EMPTY_CARD(sourcetracker, "wsp100"); +-#endif + +-#if defined(HAVE_VIHAHEADERS) +- sourcetracker->RegisterPacketsource("viha", 1, "IEEE80211b", 6, +- vihasource_registrant, +- NULL, NULL, chancontrol_viha, 0); +-#else + REG_EMPTY_CARD(sourcetracker, "viha"); +-#endif + + return 1; + } +diff -urN kismet.dev/kis_packsources.h kismet.dev2/kis_packsources.h +--- kismet.dev/kis_packsources.h 2004-06-09 21:09:29.000000000 +0200 ++++ kismet.dev2/kis_packsources.h 2006-04-14 19:31:55.000000000 +0200 +@@ -22,11 +22,7 @@ + #include "config.h" + + #include "packetsource.h" +-#include "prism2source.h" + #include "pcapsource.h" +-#include "wtapfilesource.h" +-#include "wsp100source.h" +-#include "vihasource.h" + #include "dronesource.h" + #include "packetsourcetracker.h" + +diff -urN kismet.dev/Makefile.in kismet.dev2/Makefile.in +--- kismet.dev/Makefile.in 2006-04-13 00:49:15.000000000 +0200 ++++ kismet.dev2/Makefile.in 2006-04-14 19:31:55.000000000 +0200 +@@ -39,26 +39,25 @@ + DEPEND = .depend + + # Objects +-PSO = util.o ringbuf.o configfile.o speech.o ifcontrol.o iwcontrol.o packet.o \ +- pcapsource.o prism2source.o wtapfilesource.o wsp100source.o \ +- dronesource.o vihasource.o packetsourcetracker.o kis_packsources.o \ +- wtapdump.o wtaplocaldump.o gpsdump.o airsnortdump.o fifodump.o \ +- gpsd.o manuf.o \ ++PSO = util.o ringbuf.o configfile.o ifcontrol.o iwcontrol.o packet.o \ ++ pcapsource.o manuf.o \ ++ dronesource.o packetsourcetracker.o kis_packsources.o \ ++ wtapdump.o wtaplocaldump.o airsnortdump.o fifodump.o \ + packetracker.o timetracker.o alertracker.o finitestate.o \ + getopt.o \ + tcpserver.o server_protocols.o server_globals.o kismet_server.o + PS = kismet_server + + DRONEO = util.o ringbuf.o configfile.o getopt.o ifcontrol.o iwcontrol.o packet.o \ +- tcpstreamer.o prism2source.o pcapsource.o wtapfilesource.o wsp100source.o \ +- dronesource.o vihasource.o packetsourcetracker.o kis_packsources.o \ +- timetracker.o gpsd.o server_globals.o kismet_drone.o ++ tcpstreamer.o pcapsource.o \ ++ dronesource.o packetsourcetracker.o kis_packsources.o \ ++ timetracker.o server_globals.o kismet_drone.o + DRONE = kismet_drone + +-NCO = util.o configfile.o speech.o manuf.o tcpclient.o \ ++NCO = util.o configfile.o manuf.o tcpclient.o \ + frontend.o cursesfront.o \ + panelfront.o panelfront_display.o panelfront_input.o \ +- gpsd.o getopt.o kismet_client.o ++ getopt.o kismet_client.o + NC = kismet_client + + GPSLO = getopt.o util.o configfile.o expat.o manuf.o \ +diff -urN kismet.dev/packetracker.cc kismet.dev2/packetracker.cc +--- kismet.dev/packetracker.cc 2006-04-01 18:37:07.000000000 +0200 ++++ kismet.dev2/packetracker.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -2443,23 +2443,3 @@ + + } + +-// Write a gpsdrive compatable waypoint file +-int Packetracker::WriteGpsdriveWaypt(FILE *in_file) { +- fseek(in_file, 0L, SEEK_SET); +- ftruncate(fileno(in_file), 0); +- +- // Convert the map to a vector and sort it +- for (map::const_iterator i = bssid_map.begin(); +- i != bssid_map.end(); ++i) { +- wireless_network *net = i->second; +- +- float lat, lon; +- lat = (net->min_lat + net->max_lat) / 2; +- lon = (net->min_lon + net->max_lon) / 2; +- fprintf(in_file, "%s\t%f %f\n", waypointformat == 1 ? net->ssid.c_str() : net->bssid.Mac2String().c_str(), lat, lon); +- } +- +- fflush(in_file); +- +- return 1; +-} +diff -urN kismet.dev/packetracker.h kismet.dev2/packetracker.h +--- kismet.dev/packetracker.h 2005-06-01 05:46:18.000000000 +0200 ++++ kismet.dev2/packetracker.h 2006-04-14 19:31:55.000000000 +0200 +@@ -30,7 +30,6 @@ + #include + + #include "util.h" +-#include "gpsd.h" + #include "packet.h" + #include "tracktypes.h" + #include "manuf.h" +@@ -85,8 +84,6 @@ + int WriteXMLNetworks(string in_fname); + int WriteCisco(string in_fname); + +- int WriteGpsdriveWaypt(FILE *in_file); +- + void WriteSSIDMap(FILE *in_file); + void ReadSSIDMap(FILE *in_file); + +diff -urN kismet.dev/packetsourcetracker.cc kismet.dev2/packetsourcetracker.cc +--- kismet.dev/packetsourcetracker.cc 2006-04-14 23:43:01.695817542 +0200 ++++ kismet.dev2/packetsourcetracker.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -27,7 +27,6 @@ + Packetsourcetracker::Packetsourcetracker() { + next_packsource_id = 0; + next_meta_id = 0; +- gpsd = NULL; + timetracker = NULL; + chanchild_pid = 0; + sockpair[0] = sockpair[1] = 0; +@@ -694,7 +693,6 @@ + + // Register the trackers with it + meta->capsource->AddTimetracker(timetracker); +- meta->capsource->AddGpstracker(gpsd); + + // Open it + fprintf(stderr, "Source %d (%s): Opening %s source interface %s...\n", +diff -urN kismet.dev/packetsourcetracker.h kismet.dev2/packetsourcetracker.h +--- kismet.dev/packetsourcetracker.h 2005-03-21 20:47:26.000000000 +0100 ++++ kismet.dev2/packetsourcetracker.h 2006-04-14 19:31:55.000000000 +0200 +@@ -30,7 +30,6 @@ + #include + + #include "timetracker.h" +-#include "gpsd.h" + #include "packetsource.h" + + // Sentinel for starting a new packet +@@ -144,9 +143,6 @@ + // Register a timer event handler for us to use + void AddTimetracker(Timetracker *in_tracker) { timetracker = in_tracker; } + +- // Register the GPS server for us to use +- void AddGpstracker(GPSD *in_gpsd) { gpsd = in_gpsd; } +- + // Register a packet prototype source... Card type string, root binding requirement, + // function to generate an instance of the source, and function to change channel + // for this card type. This fills out the prototype. Sources that don't hop +@@ -221,7 +217,6 @@ + uint16_t channel; + } chanchild_changepacket; + +- GPSD *gpsd; + Timetracker *timetracker; + + char errstr[1024]; +diff -urN kismet.dev/panelfront.cc kismet.dev2/panelfront.cc +--- kismet.dev/panelfront.cc 2005-06-29 20:04:43.000000000 +0200 ++++ kismet.dev2/panelfront.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -37,7 +37,6 @@ + " Key Action", + " e List Kismet servers", + " z Toggle fullscreen zoom of network view", +- " m Toggle muting of sound and speech", + " t Tag (or untag) selected network", + " g Group tagged networks", + " u Ungroup current group", +@@ -121,7 +120,6 @@ + "Key Action", + " e List Kismet servers", + " z Toggle fullscreen net list", +- " m Toggle muting", + " t Tag (or untag) selected", + " g Group tagged networks", + " u Ungroup current group", +@@ -237,19 +235,6 @@ + }; + + +-char *KismetHelpGps[] = { +- "KISMET NETWORK FOLLOW", +- "This panel estimates the center of a network, the current", +- "direction of travel, and the direction of the network center", +- "and distance relative to the current direction of movement.", +- " Key Action", +- " s Follow location of strongest packet", +- " c Follow location of estimated network center", +- " q Close popup", +- NULL +-}; +- +- + char *KismetHelpStats[] = { + "KISMET NETWORK STATISTICS", + "This panel displays overall statistics about the wireless", +@@ -678,7 +663,6 @@ + } + + // Enable all the protocols we handle +- in_client->EnableProtocol("GPS"); + in_client->EnableProtocol("INFO"); + in_client->EnableProtocol("REMOVE"); + in_client->EnableProtocol("NETWORK"); +@@ -1282,27 +1266,6 @@ + if (con->client == NULL) + continue; + +- // Update GPS +- float newlat, newlon, newalt, newspd, newheading; +- int newfix; +- con->client->FetchLoc(&newlat, &newlon, &newalt, &newspd, &newheading, &newfix); +- +- if (GPSD::EarthDistance(newlat, newlon, last_lat, last_lon) > 10) { +- con->last_lat = con->lat; +- con->last_lon = con->lon; +- con->last_spd = con->spd; +- con->last_alt = con->alt; +- con->last_fix = con->fix; +- con->last_heading = con->heading; +- } +- +- con->lat = newlat; +- con->lon = newlon; +- con->alt = newalt; +- con->spd = newspd; +- con->heading = newheading; +- con->fix = newfix; +- + // Update quality + con->quality = con->client->FetchQuality(); + con->power = con->client->FetchPower(); +diff -urN kismet.dev/panelfront_display.cc kismet.dev2/panelfront_display.cc +--- kismet.dev/panelfront_display.cc 2005-08-15 17:52:16.000000000 +0200 ++++ kismet.dev2/panelfront_display.cc 2006-04-14 19:31:55.000000000 +0200 +@@ -727,7 +727,7 @@ + mvwaddstr(netwin, netwin->_maxy, netwin->_maxx - 14, ptxt); + } + +-#ifdef HAVE_GPS ++#if 0 + + + if (!(lat == 0 && lon == 0 && alt == 0 && spd == 0 && fix == 0)) { +@@ -1496,51 +1496,6 @@ + snprintf(output, print_width, "Networks: %d", (int) details_network->networks.size()); + kwin->text.push_back(output); + +- if (details_network->virtnet->gps_fixed != -1) { +- if ((details_network->virtnet->min_lat == 90) && (details_network->virtnet->min_lon == 180) && +- (details_network->virtnet->max_lat == -90) && (details_network->virtnet->max_lon == -180)) { +- snprintf(output, print_width, "Min Loc : N/A"); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Max Loc : N/A"); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Range : N/A"); +- kwin->text.push_back(output); +- } +- else { +- snprintf(output, print_width, "Min Loc : Lat %f Lon %f Alt %f Spd %f", +- details_network->virtnet->min_lat, details_network->virtnet->min_lon, +- metric ? details_network->virtnet->min_alt / 3.3 : details_network->virtnet->min_alt, +- metric ? details_network->virtnet->min_spd * 1.6093 : details_network->virtnet->min_spd); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Max Loc : Lat %f Lon %f Alt %f Spd %f", +- details_network->virtnet->max_lat, details_network->virtnet->max_lon, +- metric ? details_network->virtnet->max_alt / 3.3 : details_network->virtnet->max_alt, +- metric ? details_network->virtnet->max_spd * 1.6093 : details_network->virtnet->max_spd); +- kwin->text.push_back(output); +- +- double diagdist = GPSD::EarthDistance(details_network->virtnet->min_lat, +- details_network->virtnet->min_lon, +- details_network->virtnet->max_lat, +- details_network->virtnet->max_lon); +- +- if (finite(diagdist)) { +- if (metric) { +- if (diagdist < 1000) +- snprintf(output, print_width, "Range : %.3f meters", diagdist); +- else +- snprintf(output, print_width, "Range : %.3f kilometers", diagdist / 1000); +- } else { +- diagdist *= 3.3; +- if (diagdist < 5280) +- snprintf(output, print_width, "Range : %.3f feet", diagdist); +- else +- snprintf(output, print_width, "Range : %.3f miles", diagdist / 5280); +- } +- kwin->text.push_back(output); +- } +- } +- } +- + if (details_network->virtnet->carrier_set & (1 << (int) carrier_80211b)) { + snprintf(output, print_width, "Carrier : IEEE 802.11b"); + kwin->text.push_back(output); +@@ -1853,49 +1808,6 @@ + dnet->ipdata.range_ip[2], dnet->ipdata.range_ip[3]); + kwin->text.push_back(output); + } +- +- if (dnet->gps_fixed != -1) { +- if ((dnet->min_lat == 90) && (dnet->min_lon == 180) && +- (dnet->max_lat == -90) && (dnet->max_lon == -180)) { +- snprintf(output, print_width, "Min Loc : N/A"); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Max Loc : N/A"); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Range : N/A"); +- kwin->text.push_back(output); +- } +- else { +- snprintf(output, print_width, "Min Loc : Lat %f Lon %f Alt %f Spd %f", +- dnet->min_lat, dnet->min_lon, +- metric ? dnet->min_alt / 3.3 : dnet->min_alt, +- metric ? dnet->min_spd * 1.6093 : dnet->min_spd); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Max Loc : Lat %f Lon %f Alt %f Spd %f", +- dnet->max_lat, dnet->max_lon, +- metric ? dnet->max_alt / 3.3 : dnet->max_alt, +- metric ? dnet->max_spd * 1.6093 : dnet->max_spd); +- kwin->text.push_back(output); +- +- double diagdist = GPSD::EarthDistance(dnet->min_lat, dnet->min_lon, +- dnet->max_lat, dnet->max_lon); +- +- if (finite(diagdist)) { +- if (metric) { +- if (diagdist < 1000) +- snprintf(output, print_width, "Range : %f meters", diagdist); +- else +- snprintf(output, print_width, "Range : %f kilometers", diagdist / 1000); +- } else { +- diagdist *= 3.3; +- if (diagdist < 5280) +- snprintf(output, print_width, "Range : %f feet", diagdist); +- else +- snprintf(output, print_width, "Range : %f miles", diagdist / 5280); +- } +- kwin->text.push_back(output); +- } +- } +- } + } + + // Now we just use the text printer to handle the rest for us +@@ -1903,184 +1815,6 @@ + return TextPrinter(in_window); + } + +-int PanelFront::GpsPrinter(void *in_window) { +- kis_window *kwin = (kis_window *) in_window; +- +- char output[1024]; +- kwin->text.clear(); +- +- if (details_network == NULL) { +- kwin->text.push_back("The network or group being displayed"); +- kwin->text.push_back("has been deleted. Please select a "); +- kwin->text.push_back("different network."); +- return TextPrinter(in_window); +- } +- +- wireless_network *dnet = details_network->virtnet; +- +- int print_width = kwin->print_width; +- if (print_width > 1024) +- print_width = 1023; +- +- if (print_width < 32) { +- kwin->text.push_back("Display not wide enough"); +- return TextPrinter(in_window); +- } +- +- if (dnet->aggregate_points == 0) { +- kwin->text.push_back("No GPS data."); +- return TextPrinter(in_window); +- } +- +- float center_lat, center_lon; +- +- // We hijack the "selected" field as a toggle +- if (kwin->selected == 1) { +- center_lat = dnet->best_lat; +- center_lon = dnet->best_lon; +- } else { +- center_lat = dnet->aggregate_lat / dnet->aggregate_points; +- center_lon = dnet->aggregate_lon / dnet->aggregate_points; +- } +- +- // Get bearing to the center +- float center_angle = GPSD::CalcHeading(center_lat, center_lon, lat, lon); +- +- float difference_angle = heading - center_angle; +- if (difference_angle < 0) +- difference_angle += 360; +- +- double diagdist = GPSD::EarthDistance(lat, lon, center_lat, center_lon); +- +- // Now we know everything - where we are, where we are headed, where we SHOULD be headed +- // to get to the supposed center of the network, how far it is, and the orientation on our +- // compass to get to it. Time to start drawing our output. +- +- char compass[5][10]; +- memset(compass, 0, sizeof(char) * 5 * 10); +- +- // | 41.12345x-74.12345 .-|-/ | +- // | Bearing: / |/ \ | +- // | 123.23 degrees | O | | +- // | \ \ / | +- // | Estimated center: '---\ | +- +- +- // Find the orientation on our compass: +- if (difference_angle > 330 || difference_angle <= 22) { +- snprintf(compass[0], 10, " .-|-. "); +- snprintf(compass[1], 10, " / | \\ "); +- snprintf(compass[2], 10, "| O |"); +- snprintf(compass[3], 10, " \\ / "); +- snprintf(compass[4], 10, " '---' "); +- } else if (difference_angle > 22 && difference_angle <= 66) { +- snprintf(compass[0], 10, " .---/ "); +- snprintf(compass[1], 10, " / / \\ "); +- snprintf(compass[2], 10, "| O |"); +- snprintf(compass[3], 10, " \\ / "); +- snprintf(compass[4], 10, " '---' "); +- } else if (difference_angle > 66 && difference_angle <= 110) { +- snprintf(compass[0], 10, " .---. "); +- snprintf(compass[1], 10, " / \\ "); +- snprintf(compass[2], 10, "| O----"); +- snprintf(compass[3], 10, " \\ / "); +- snprintf(compass[4], 10, " '---' "); +- } else if (difference_angle > 110 && difference_angle <= 154) { +- snprintf(compass[0], 10, " .---. "); +- snprintf(compass[1], 10, " / \\ "); +- snprintf(compass[2], 10, "| O |"); +- snprintf(compass[3], 10, " \\ \\ / "); +- snprintf(compass[4], 10, " '---\\ "); +- } else if (difference_angle > 154 && difference_angle <= 198) { +- snprintf(compass[0], 10, " .---. "); +- snprintf(compass[1], 10, " / \\ "); +- snprintf(compass[2], 10, "| O |"); +- snprintf(compass[3], 10, " \\ | / "); +- snprintf(compass[4], 10, " '-|-' "); +- } else if (difference_angle > 198 && difference_angle <= 242) { +- snprintf(compass[0], 10, " .---. "); +- snprintf(compass[1], 10, " / \\ "); +- snprintf(compass[2], 10, "| O |"); +- snprintf(compass[3], 10, " \\ / / "); +- snprintf(compass[4], 10, " /---' "); +- } else if (difference_angle > 242 && difference_angle <= 286) { +- snprintf(compass[0], 10, " .---. "); +- snprintf(compass[1], 10, " / \\ "); +- snprintf(compass[2], 10, "----O |"); +- snprintf(compass[3], 10, " \\ / "); +- snprintf(compass[4], 10, " '---' "); +- } else if (difference_angle > 286 && difference_angle <= 330) { +- snprintf(compass[0], 10, " \\---. "); +- snprintf(compass[1], 10, " / \\ \\ "); +- snprintf(compass[2], 10, "| O |"); +- snprintf(compass[3], 10, " \\ / "); +- snprintf(compass[4], 10, " '---' "); +- } else { +- snprintf(compass[0], 10, "%f\n", difference_angle); +- } +- +- +- // - Network GPS ---------------------| +- // | Current: | +- // | 41.12345x-74.12345 .-|-. | +- // | Bearing: / | \ | +- // | 123.23 degrees | O | | +- // | \ \ / | +- // | Estimated center: '---\ | +- // | -73.12345x43.12345 | +- // | 120 feet | +- // ------------------------------------ +- char textfrag[23]; +- +- snprintf(output, print_width, "Current:"); +- kwin->text.push_back(output); +- +- snprintf(textfrag, 23, "%.3f x %.3f", lat, lon); +- snprintf(output, print_width, "%-22s%s", textfrag, compass[0]); +- kwin->text.push_back(output); +- +- snprintf(textfrag, 23, " Bearing:"); +- snprintf(output, print_width, "%-22s%s", textfrag, compass[1]); +- kwin->text.push_back(output); +- +- snprintf(textfrag, 23, " %.2f*", heading); +- snprintf(output, print_width, "%-22s%s", textfrag, compass[2]); +- kwin->text.push_back(output); +- +- snprintf(textfrag, 23, " "); +- snprintf(output, print_width, "%-22s%s", textfrag, compass[3]); +- kwin->text.push_back(output); +- +- if (kwin->selected == 1) +- snprintf(textfrag, 23, "Strongest signal:"); +- else +- snprintf(textfrag, 23, "Estimated Center:"); +- snprintf(output, print_width, "%-22s%s", textfrag, compass[4]); +- kwin->text.push_back(output); +- +- snprintf(textfrag, 23, "%.3f x %.3f", center_lat, center_lon); +- snprintf(output, print_width, "%-22s%.2f*", textfrag, difference_angle); +- kwin->text.push_back(output); +- +- if (metric) { +- if (diagdist < 1000) +- snprintf(textfrag, 23, "%.2f m", diagdist); +- else +- snprintf(textfrag, 23, "%.2f km", diagdist / 1000); +- } else { +- diagdist *= 3.3; +- if (diagdist < 5280) +- snprintf(textfrag, 23, "%.2f ft", diagdist); +- else +- snprintf(textfrag, 23, "%.2f mi", diagdist / 5280); +- } +- +- snprintf(output, print_width, "%-22s%s", "", textfrag); +- kwin->text.push_back(output); +- +- return TextPrinter(in_window); +-} +- + int PanelFront::PackPrinter(void *in_window) { + kis_window *kwin = (kis_window *) in_window; + +@@ -3049,53 +2783,6 @@ + details_client->ipdata.ip[2], details_client->ipdata.ip[3]); + kwin->text.push_back(output); + +- if (details_client->gps_fixed != -1) { +- kwin->text.push_back(""); +- +- if ((details_client->min_lat == 90) && (details_client->min_lon == 180) && +- (details_client->max_lat == -90) && (details_client->max_lon == -180)) { +- snprintf(output, print_width, "Min Loc : N/A"); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Max Loc : N/A"); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Range : N/A"); +- kwin->text.push_back(output); +- } +- else { +- snprintf(output, print_width, "Min Loc : Lat %f Lon %f Alt %f Spd %f", +- details_client->min_lat, details_client->min_lon, +- metric ? details_client->min_alt / 3.3 : details_client->min_alt, +- metric ? details_client->min_spd * 1.6093 : details_client->min_spd); +- kwin->text.push_back(output); +- snprintf(output, print_width, "Max Loc : Lat %f Lon %f Alt %f Spd %f", +- details_client->max_lat, details_client->max_lon, +- metric ? details_client->max_alt / 3.3 : details_client->max_alt, +- metric ? details_client->max_spd * 1.6093 : details_client->max_spd); +- kwin->text.push_back(output); +- +- double diagdist = GPSD::EarthDistance(details_client->min_lat, +- details_client->min_lon, +- details_client->max_lat, +- details_client->max_lon); +- +- if (finite(diagdist)) { +- if (metric) { +- if (diagdist < 1000) +- snprintf(output, print_width, "Range : %f meters", diagdist); +- else +- snprintf(output, print_width, "Range : %f kilometers", diagdist / 1000); +- } else { +- diagdist *= 3.3; +- if (diagdist < 5280) +- snprintf(output, print_width, "Range : %f feet", diagdist); +- else +- snprintf(output, print_width, "Range : %f miles", diagdist / 5280); +- } +- kwin->text.push_back(output); +- } +- } +- kwin->text.push_back(""); +- } + + snprintf(output, print_width, "Packets :"); + kwin->text.push_back(output); +diff -urN kismet.dev/panelfront.h kismet.dev2/panelfront.h +--- kismet.dev/panelfront.h 2005-06-29 14:50:09.000000000 +0200 ++++ kismet.dev2/panelfront.h 2006-04-14 19:31:55.000000000 +0200 +@@ -65,7 +65,6 @@ + #define SORT_SIZE 10 + extern char *KismetHelpPower[]; + extern char *KismetHelpRate[]; +-extern char *KismetHelpGps[]; + extern char *KismetHelpStats[]; + extern char *KismetHelpDump[]; + extern char *KismetHelpPack[]; +@@ -269,7 +268,6 @@ + int RatePrinter(void *in_window); + int StatsPrinter(void *in_window); + int PackPrinter(void *in_window); +- int GpsPrinter(void *in_window); + int AlertPrinter(void *in_window); + + int MainClientPrinter(void *in_window); +@@ -298,7 +296,6 @@ + int PackInput(void *in_window, int in_chr); + // Help has a generic handler + int TextInput(void *in_window, int in_chr); +- int GpsInput(void *in_window, int in_chr); + int AlertInput(void *in_window, int in_chr); + + int MainClientInput(void *in_window, int in_chr); +diff -urN kismet.dev/panelfront_input.cc kismet.dev2/panelfront_input.cc +--- kismet.dev/panelfront_input.cc 2005-06-29 14:50:09.000000000 +0200 ++++ kismet.dev2/panelfront_input.cc 2006-04-14 19:31:56.000000000 +0200 +@@ -300,16 +300,9 @@ + break; + case 'f': + case 'F': +- if (sortby != sort_auto && last_displayed.size() > 0) { +- details_network = last_displayed[kwin->selected]; +- SpawnWindow("Network Location", &PanelFront::GpsPrinter, &PanelFront::GpsInput, 8, 34); +- } else { +- WriteStatus("Cannot view network GPS info in autofit sort mode. Sort by a different method."); +- } + break; + case 'm': + case 'M': +- MuteToggle(); + break; + case 'e': + case 'E': +@@ -447,7 +440,6 @@ + switch(in_chr) { + case 'm': + case 'M': +- MuteToggle(); + break; + case 'p': + case 'P': +@@ -546,33 +538,6 @@ + return 1; + } + +-int PanelFront::GpsInput(void *in_window, int in_chr) { +- kis_window *kwin = (kis_window *) in_window; +- +- switch (in_chr) { +- case 's': +- case 'S': +- kwin->selected = 1; +- break; +- case 'c': +- case 'C': +- kwin->selected = 0; +- break; +- case 'h': +- case 'H': +- SpawnHelp(KismetHelpGps); +- break; +- case 'x': +- case 'X': +- case 'q': +- case 'Q': +- return 0; +- break; +- } +- +- return 1; +-} +- + int PanelFront::RateInput(void *in_window, int in_chr) { + switch (in_chr) { + case 'h': +@@ -645,24 +610,6 @@ + return 1; + } + +-void PanelFront::MuteToggle() { +- if (muted) { +- speech = old_speech; +- sound = old_sound; +- muted = 0; +- WriteStatus("Restoring sound"); +- } else if (sound != 0 || speech != 0) { +- old_speech = speech; +- old_sound = sound; +- sound = 0; +- speech = 0; +- muted = 1; +- WriteStatus("Muting sound"); +- } else if (sound == 0 && speech == 0) { +- WriteStatus("Sound not enabled."); +- } +-} +- + int PanelFront::AlertInput(void *in_window, int in_chr) { + kis_window *kwin = (kis_window *) in_window; + +diff -urN kismet.dev/pcapsource.cc kismet.dev2/pcapsource.cc +--- kismet.dev/pcapsource.cc 2006-04-14 23:43:01.697817483 +0200 ++++ kismet.dev2/pcapsource.cc 2006-04-14 20:25:06.000000000 +0200 +@@ -343,11 +343,6 @@ + packet->moddata = moddata; + packet->modified = 0; + +- if (gpsd != NULL) { +- gpsd->FetchLoc(&packet->gps_lat, &packet->gps_lon, &packet->gps_alt, +- &packet->gps_spd, &packet->gps_heading, &packet->gps_fix); +- } +- + if (datalink_type == DLT_PRISM_HEADER) { + ret = Prism2KisPack(packet, data, moddata); + } else if (datalink_type == KDLT_BSD802_11) { +@@ -1157,133 +1152,6 @@ + + // Monitor commands + #ifdef HAVE_LINUX_WIRELESS +-// Cisco uses its own config file in /proc to control modes +-int monitor_cisco(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- FILE *cisco_config; +- char cisco_path[128]; +- +- linux_ifparm *ifparm = (linux_ifparm *) malloc(sizeof(linux_ifparm)); +- (*in_if) = ifparm; +- +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifparm->flags) < 0) { +- return -1; +- } +- +- if (Iwconfig_Get_SSID(in_dev, in_err, ifparm->essid) < 0) +- return -1; +- +- if ((ifparm->channel = Iwconfig_Get_Channel(in_dev, in_err)) < 0) +- return -1; +- +- if (Iwconfig_Get_Mode(in_dev, in_err, &ifparm->mode) < 0) +- return -1; +- +- if (Ifconfig_Delta_Flags(in_dev, in_err, IFF_UP | IFF_RUNNING | IFF_PROMISC) < 0) +- return -1; +- +- // Try the iwpriv +- if (Iwconfig_Set_IntPriv(in_dev, "setRFMonitor", 1, 0, in_err) >= 0) { +- return 0; +- } +- +- // Zero the ssid - nonfatal +- Iwconfig_Set_SSID(in_dev, in_err, NULL); +- +- // Build the proc control path +- snprintf(cisco_path, 128, "/proc/driver/aironet/%s/Config", in_dev); +- +- if ((cisco_config = fopen(cisco_path, "w")) == NULL) { +- snprintf(in_err, STATUS_MAX, "Unable to open cisco control file '%s' %d:%s", +- cisco_path, errno, strerror(errno)); +- return -1; +- } +- +- fprintf(cisco_config, "Mode: r\n"); +- fprintf(cisco_config, "Mode: y\n"); +- fprintf(cisco_config, "XmitPower: 1\n"); +- +- fclose(cisco_config); +- +- // Channel can't be set on cisco with these drivers. +- +- return 0; +-} +- +-int unmonitor_cisco(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- int ret = -1; +- +- // Try the iwpriv +- if (Iwconfig_Set_IntPriv(in_dev, "setRFMonitor", 0, 0, in_err) >= 0) { +- // If we're the new drivers, unmonitor +- if (Ifconfig_Set_Flags(in_dev, in_err, ifparm->flags) < 0) { +- return -1; +- } +- +- // Reset the SSID since monitor mode nukes it +- if (Iwconfig_Set_SSID(in_dev, in_err, ifparm->essid) < 0) +- return -1; +- +- if (ifparm->channel > 0) { +- if (Iwconfig_Set_Channel(in_dev, ifparm->channel, in_err) < 0) +- return -1; +- } +- +- ret = 1; +- } +- +- free(ifparm); +- +- return ret; +-} +- +-// Cisco uses its own config file in /proc to control modes +-// +-// I was doing this with ioctls but that seems to cause lockups while +-// this method doesn't. I don't think I like these drivers. +-int monitor_cisco_wifix(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- FILE *cisco_config; +- char cisco_path[128]; +- vector devbits = StrTokenize(in_dev, ":"); +- +- if (devbits.size() < 2) { +- snprintf(in_err, STATUS_MAX, "Invalid device pair '%s'. Proper device " +- "for cisco_wifix is eth?:wifi?.", in_dev); +- return -1; +- } +- +- // Bring the device up, zero its ip, and set promisc +- if (Ifconfig_Delta_Flags(devbits[0].c_str(), in_err, +- IFF_UP | IFF_RUNNING | IFF_PROMISC) < 0) +- return -1; +- if (Ifconfig_Delta_Flags(devbits[1].c_str(), in_err, +- IFF_UP | IFF_RUNNING | IFF_PROMISC) < 0) +- return -1; +- +- // Zero the ssid, nonfatally +- Iwconfig_Set_SSID(devbits[0].c_str(), in_err, NULL); +- Iwconfig_Set_SSID(devbits[1].c_str(), in_err, NULL); +- +- // Build the proc control path +- snprintf(cisco_path, 128, "/proc/driver/aironet/%s/Config", devbits[0].c_str()); +- +- if ((cisco_config = fopen(cisco_path, "w")) == NULL) { +- snprintf(in_err, STATUS_MAX, "Unable to open cisco control file '%s' %d:%s", +- cisco_path, errno, strerror(errno)); +- return -1; +- } +- +- fprintf(cisco_config, "Mode: r\n"); +- fprintf(cisco_config, "Mode: y\n"); +- fprintf(cisco_config, "XmitPower: 1\n"); +- +- fclose(cisco_config); +- +- // Channel can't be set on cisco with these drivers. +- +- return 0; +-} +- + // Hostap uses iwpriv and iwcontrol settings to control monitor mode + int monitor_hostap(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { + int ret; +@@ -1433,132 +1301,6 @@ + + } + +-// Acx100 uses the packhdr iwpriv control to set link state, rest is normal +-int monitor_acx100(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- int ret; +- +- // Allocate a tracking record for the interface settings and remember our +- // setup +- linux_ifparm *ifparm = (linux_ifparm *) malloc(sizeof(linux_ifparm)); +- (*in_if) = ifparm; +- +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifparm->flags) < 0) { +- return -1; +- } +- +- if (Iwconfig_Get_SSID(in_dev, in_err, ifparm->essid) < 0) +- return -1; +- +- if ((ifparm->channel = Iwconfig_Get_Channel(in_dev, in_err)) < 0) +- return -1; +- +- if (Iwconfig_Get_Mode(in_dev, in_err, &ifparm->mode) < 0) +- return -1; +- +- // it looks like an orinoco now, apparently +- if ((ret = Iwconfig_Set_IntPriv(in_dev, "monitor", 1, initch, in_err)) < 0) { +- if (ret == -2) +- snprintf(in_err, 1024, "Could not find 'monitor' private ioctl " +- "Make sure you have the latest ACX100 development release."); +- return -1; +- } +- +- if (chancontrol_wext(in_dev, initch, in_err, NULL) < 0) +- return -1; +- +- return 0; +-} +- +-int unmonitor_acx100(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // Restore the IP settings +- linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- if (Ifconfig_Set_Flags(in_dev, in_err, ifparm->flags) < 0) { +- return -1; +- } +- +- Iwconfig_Set_IntPriv(in_dev, "monitor", 0, ifparm->channel, in_err); +- Iwconfig_Set_Mode(in_dev, in_err, ifparm->mode); +- +- if (Iwconfig_Set_SSID(in_dev, in_err, ifparm->essid) < 0) +- return -1; +- +- free(ifparm); +- +- return 1; +-} +- +-int monitor_admtek(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // Allocate a tracking record for the interface settings and remember our +- // setup +- linux_ifparm *ifparm = (linux_ifparm *) malloc(sizeof(linux_ifparm)); +- (*in_if) = ifparm; +- +- // Try to figure out the name so we know if we have fcs bytes or not +- char iwname[IFNAMSIZ+1]; +- if (Iwconfig_Get_Name(in_dev, in_err, iwname) < 0) +- return -1; +- +- if (strncmp(iwname, "IEEE 802.11b", IFNAMSIZ) == 0) { +- // Looks like the GPL driver, we need to adjust the fcsbytes +- PcapSource *psrc = (PcapSource *) in_ext; +- psrc->fcsbytes = 4; +- } +- +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifparm->flags) < 0) { +- return -1; +- } +- +- if ((ifparm->flags & IFF_UP)) { +- if ((ifparm->channel = Iwconfig_Get_Channel(in_dev, in_err)) < 0) +- return -1; +- +- if (Iwconfig_Get_Mode(in_dev, in_err, &ifparm->mode) < 0) +- return -1; +- +- if (Iwconfig_Get_SSID(in_dev, in_err, ifparm->essid) < 0) +- return -1; +- +- } else { +- ifparm->channel = -1; +- ifparm->mode = -1; +- } +- +- int ret = monitor_wext(in_dev, initch, in_err, in_if, in_ext); +- +- if (ret < 0 && ret != -2) +- return ret; +- +- if (Iwconfig_Set_SSID(in_dev, in_err, "") < 0) +- return -1; +- +- return 0; +-} +- +-int unmonitor_admtek(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- if (unmonitor_wext(in_dev, initch, in_err, in_if, in_ext)) +- return -1; +- +- if (Iwconfig_Set_SSID(in_dev, in_err, ifparm->essid) < 0) +- return -1; +- +- return 1; +-} +-// vtar5k iwpriv control to set link state, rest is normal +-int monitor_vtar5k(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // Set the prism iwpriv control to 1 +- if (Iwconfig_Set_IntPriv(in_dev, "prism", 1, 0, in_err) < 0) { +- return -1; +- } +- +- // The rest is standard wireless extensions +- if (monitor_wext(in_dev, initch, in_err, in_if, in_ext) < 0) +- return -1; +- +- return 0; +-} + + /* Madwifi NG ioctls from net80211 */ + #define SIOC80211IFCREATE (SIOCDEVPRIVATE+7) +@@ -1927,249 +1669,6 @@ + return unmonitor_wext(in_dev, initch, in_err, in_if, in_ext); + } + +-int monitor_ipw2100(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // Allocate a tracking record for the interface settings and remember our +- // setup +- linux_ifparm *ifparm = (linux_ifparm *) malloc(sizeof(linux_ifparm)); +- (*in_if) = ifparm; +- +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifparm->flags) < 0) { +- return -1; +- } +- +- if ((ifparm->channel = Iwconfig_Get_Channel(in_dev, in_err)) < 0) +- return -1; +- +- if (Iwconfig_Get_Mode(in_dev, in_err, &ifparm->mode) < 0) +- return -1; +- +- // Call the normal monitor mode +- return (monitor_wext(in_dev, initch, in_err, in_if, in_ext)); +-} +- +-int unmonitor_ipw2100(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // Restore initial monitor header +- // linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- if (Ifconfig_Set_Flags(in_dev, in_err, ifparm->flags) < 0) { +- return -1; +- } +- +- if (Iwconfig_Set_Mode(in_dev, in_err, ifparm->mode) < 0) +- return -1; +- +- free(ifparm); +- +- return 1; +-} +- +-int monitor_ipw2200(const char *in_dev, int initch, char *in_err, +- void **in_if, void *in_ext) { +- // Allocate a tracking record for the interface settings and remember our +- // setup +- linux_ifparm *ifparm = (linux_ifparm *) malloc(sizeof(linux_ifparm)); +- (*in_if) = ifparm; +- +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifparm->flags) < 0) { +- return -1; +- } +- +- if ((ifparm->channel = Iwconfig_Get_Channel(in_dev, in_err)) < 0) +- return -1; +- +- if (Iwconfig_Get_Mode(in_dev, in_err, &ifparm->mode) < 0) +- return -1; +- +- // Call the normal monitor mode +- return (monitor_wext(in_dev, initch, in_err, in_if, in_ext)); +-} +- +-int unmonitor_ipw2200(const char *in_dev, int initch, char *in_err, +- void **in_if, void *in_ext) { +- // Restore initial monitor header +- // linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- if (Ifconfig_Set_Flags(in_dev, in_err, ifparm->flags) < 0) { +- return -1; +- } +- +- if (Iwconfig_Set_Mode(in_dev, in_err, ifparm->mode) < 0) +- return -1; +- +- // James says this wants to be set to channel 0 for proper scanning operation +- if (Iwconfig_Set_Channel(in_dev, 0, in_err) < 0) +- return -1; +- +- free(ifparm); +- +- return 1; +-} +- +-// (Unless we learn different) the 3945 in full rfmon acts the same as +-// an ipw2200, so we'll use the same control mechanisms +-int monitor_ipw3945(const char *in_dev, int initch, char *in_err, +- void **in_if, void *in_ext) { +- // Allocate a tracking record for the interface settings and remember our +- // setup +- linux_ifparm *ifparm = (linux_ifparm *) malloc(sizeof(linux_ifparm)); +- (*in_if) = ifparm; +- +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifparm->flags) < 0) { +- return -1; +- } +- +- if ((ifparm->channel = Iwconfig_Get_Channel(in_dev, in_err)) < 0) +- return -1; +- +- if (Iwconfig_Get_Mode(in_dev, in_err, &ifparm->mode) < 0) +- return -1; +- +- // Call the normal monitor mode +- return (monitor_wext(in_dev, initch, in_err, in_if, in_ext)); +-} +- +-int unmonitor_ipw3945(const char *in_dev, int initch, char *in_err, +- void **in_if, void *in_ext) { +- // Restore initial monitor header +- // linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- linux_ifparm *ifparm = (linux_ifparm *) (*in_if); +- +- if (Ifconfig_Set_Flags(in_dev, in_err, ifparm->flags) < 0) { +- return -1; +- } +- +- if (Iwconfig_Set_Mode(in_dev, in_err, ifparm->mode) < 0) +- return -1; +- +- // James says this wants to be set to channel 0 for proper scanning operation +- if (Iwconfig_Set_Channel(in_dev, 0, in_err) < 0) +- return -1; +- +- free(ifparm); +- +- return 1; +-} +- +-// The 3945 in "parasite" mode (until James names it) is a different +-// beast entirely. It uses a dynamically added tap interface to give us +-// realtime rtap formatted frames off the interface, so we need to +-// turn it on via sysfs and then push the new rtapX interface into the source +-// before the open happens +-int monitor_ipwlivetap(const char *in_dev, int initch, char *in_err, +- void **in_if, void *in_ext) { +- // We don't try to remember settings because we aren't going to do +- // anything with them, we're leeching off a dynamic interface made +- // just for us. +- char dynif[32]; +- FILE *sysf; +- char path[1024]; +- short int ifflags; +- +- // Try to get the flags off the master interface +- if (Ifconfig_Get_Flags(in_dev, in_err, &ifflags) < 0) { +- return -1; +- } +- +- // If the master interface isn't even up, blow up. +- if ((ifflags & IFF_UP) == 0) { +- snprintf(in_err, 1024, "The ipw control interface (%s) is not " +- "configured as 'up'. The ipwlivetap mode reports " +- "traffic from a currently running interface. For pure " +- "rfmon monitor mode, use ipwXXXX instead.", in_dev); +- return -1; +- } +- +- // Use the .../net/foo/device symlink into the .../bus/pci/drivers/ +- // ipw3945/foo/ pci bus interface +- snprintf(path, 1024, "/sys/class/net/%s/device/rtap_iface", +- in_dev); +- +- // Open it in RO mode first and get the current state. I'm not sure +- // how well frewind works on a dynamic system file so we'll just +- // close it off and re-open it when we go to set modes, if we need +- // to. +- if ((sysf = fopen(path, "r")) == NULL) { +- snprintf(in_err, 1024, "Failed to open ipw sysfs tap control file, " +- "check that the version of the ipw drivers you are running " +- "is recent enough, and that your system has sysfs properly " +- "set up."); +- return -1; +- } +- +- fgets(dynif, 32, sysf); +- +- // We're done with the RO +- fclose(sysf); +- +- // If it's -1, we aren't turned on and we need to. +- if (strncmp(dynif, "-1", 32) == 0) { +- if ((sysf = fopen(path, "w")) == NULL) { +- snprintf(in_err, 1024, "Failed to open the ipw sysfs tap control " +- "file for writing (%s). Check that Kismet has the proper " +- "privilege levels and that you are running a version of the " +- "ipw drivers which supports associated rfmon.", strerror(errno)); +- return -1; +- } +- +- fprintf(sysf, "1\n"); +- fclose(sysf); +- +- // Reopen it again for reading for the last time, and get the +- // interface we changed to. Do some minor error checking to make +- // sure the new interface isn't called -1, 0, or 1, which I'm going +- // to guess would imply an older driver +- if ((sysf = fopen(path, "r")) == NULL) { +- snprintf(in_err, 1024, "Failed to open the ipw sysfs tap " +- "control to find the interface allocated. Something strange " +- "has happened, because the control file was available " +- "previously for setting. Check your system messages."); +- return -1; +- } +- +- fgets(dynif, 32, sysf); +- +- fclose(sysf); +- +- // Wait for the distro to settle if its going to rename an interface +- sleep(1); +- } +- +- // Sanity check the interface we were told to use. A 0, 1, -1 probably +- // means a bad driver version. +- if (strncmp(dynif, "-1", 32) == 0 || strncmp(dynif, "0", 32) == 0 || +- strncmp(dynif, "1", 32) == 0) { +- snprintf(in_err, 1024, "Got a nonsense interface from the ipw " +- "sysfs tap control file. This probably means your ipw " +- "drivers are out of date, or that there is something strange " +- "happening in the drivers. Check your system messages."); +- return -1; +- } +- +- // Now that we've gone through that nonsense, make sure the +- // dynamic rtap interface is up +- if (Ifconfig_Delta_Flags(dynif, in_err, IFF_UP | IFF_RUNNING | IFF_PROMISC) < 0) +- return -1; +- +- // And push the config into the packetsoure +- ((KisPacketSource *) in_ext)->SetInterface(dynif); +- +- return 1; +-} +- +-int unmonitor_ipwlivetap(const char *in_dev, int initch, char *in_err, +- void **in_if, void *in_ext) { +- // Actually there isn't anything to do here. Right now, I don't +- // think I care if we leave the parasite rtap interface hanging around. +- // Newcore might do this better, but this isn't newcore. +- +- return 1; +-} +- + // "standard" wireless extension monitor mode + int monitor_wext(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { + int mode; +@@ -2231,108 +1730,6 @@ + #endif + + #ifdef SYS_LINUX +-// wlan-ng modern standard +-int monitor_wlanng(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // I really didn't want to do this... +- char cmdline[2048]; +- +- // Sanitize the device just to be safe. The ifconfig should fail if +- // the device is invalid, but why take risks +- for (unsigned int x = 0; x < strlen(in_dev); x++) { +- if (!isalnum(in_dev[x])) { +- snprintf(in_err, STATUS_MAX, "Invalid device '%s'", in_dev); +- return -1; +- } +- } +- +- if (Ifconfig_Delta_Flags(in_dev, in_err, IFF_UP | IFF_RUNNING | IFF_PROMISC) < 0) +- return -1; +- +- // Enable the interface +- snprintf(cmdline, 2048, "wlanctl-ng %s lnxreq_ifstate ifstate=enable >/dev/null 2>/dev/null", in_dev); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- // Turn off WEP +- snprintf(cmdline, 2048, "wlanctl-ng %s dot11req_mibset " +- "mibattribute=dot11PrivacyInvoked=false >/dev/null 2>/dev/null", in_dev); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- // Don't exclude packets +- snprintf(cmdline, 2048, "wlanctl-ng %s dot11req_mibset " +- "mibattribute=dot11ExcludeUnencrypted=false >/dev/null 2>/dev/null", in_dev); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- // Turn on rfmon on the initial channel +- snprintf(cmdline, 2048, "wlanctl-ng %s lnxreq_wlansniff channel=%d " +- "enable=true prismheader=true >/dev/null 2>/dev/null", in_dev, initch); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- return 0; +-} +- +-// wlan-ng avs +-int monitor_wlanng_avs(const char *in_dev, int initch, char *in_err, void **in_if, void *in_ext) { +- // I really didn't want to do this... +- char cmdline[2048]; +- +- // Sanitize the device just to be safe. The ifconfig should fail if +- // the device is invalid, but why take risks +- for (unsigned int x = 0; x < strlen(in_dev); x++) { +- if (!isalnum(in_dev[x])) { +- snprintf(in_err, STATUS_MAX, "Invalid device '%s'", in_dev); +- return -1; +- } +- } +- +- if (Ifconfig_Delta_Flags(in_dev, in_err, IFF_UP | IFF_RUNNING | IFF_PROMISC) < 0) +- return -1; +- +- // Enable the interface +- snprintf(cmdline, 2048, "wlanctl-ng %s lnxreq_ifstate ifstate=enable >/dev/null 2>/dev/null", in_dev); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- // Turn off WEP +- snprintf(cmdline, 2048, "wlanctl-ng %s dot11req_mibset " +- "mibattribute=dot11PrivacyInvoked=false >/dev/null 2>/dev/null", in_dev); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- // Don't exclude packets +- snprintf(cmdline, 2048, "wlanctl-ng %s dot11req_mibset " +- "mibattribute=dot11ExcludeUnencrypted=false >/dev/null 2>/dev/null", in_dev); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- // Turn on rfmon on the initial channel +- snprintf(cmdline, 2048, "wlanctl-ng %s lnxreq_wlansniff channel=%d prismheader=false " +- "wlanheader=true stripfcs=false keepwepflags=false enable=true >/dev/null 2>/dev/null", in_dev, initch); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- return 0; +-} +- + int monitor_wrt54g(const char *in_dev, int initch, char *in_err, void **in_if, + void *in_ext) { + char cmdline[2048]; +@@ -2342,7 +1739,7 @@ + snprintf(in_err, 1024, "Unable to set mode using 'iwpriv %s set_monitor 1'. " + "Some custom firmware images require you to specify the origial " + "device and a new dynamic device and use the iwconfig controls. " +- "see the README for how to configure your capture source."); ++ "see the README for how to configure your capture source.", in_dev); + return -1; + } + +@@ -2359,7 +1756,7 @@ + snprintf(in_err, 1024, "Unable to set mode using 'iwpriv %s set_monitor 0'. " + "Some custom firmware images require you to specify the origial " + "device and a new dynamic device and use the iwconfig controls. " +- "see the README for how to configure your capture source."); ++ "see the README for how to configure your capture source.", in_dev); + return -1; + } + +@@ -2607,75 +2004,6 @@ + return 0; + } + +-int chancontrol_ipw2100(const char *in_dev, int in_ch, char *in_err, void *in_ext) { +- // Introduce a slight delay to let the driver settle, a la orinoco. I don't +- // like doing this at all since it introduces hiccups into the channel control +- // process, but.... +- +- int ret = 0; +- +- ret = chancontrol_wext(in_dev, in_ch, in_err, in_ext); +- usleep(5000); +- +- return ret; +-} +- +-int chancontrol_ipw2200(const char *in_dev, int in_ch, char *in_err, void *in_ext) { +- // Lets see if this really needs the channel change delay like the 2100 did +- int ret = 0; +- +- ret = chancontrol_wext(in_dev, in_ch, in_err, in_ext); +- // Drop a tiny sleep in here to let the channel set settle, otherwise we +- // run the risk of the card freaking out +- usleep(7000); +- +- return ret; +-} +- +-#endif +- +-#ifdef SYS_LINUX +-int chancontrol_wlanng(const char *in_dev, int in_ch, char *in_err, void *in_ext) { +- // I really didn't want to do this... +- char cmdline[2048]; +- +- // Turn on rfmon on the initial channel +- snprintf(cmdline, 2048, "wlanctl-ng %s lnxreq_wlansniff channel=%d enable=true " +- "prismheader=true >/dev/null 2>&1", in_dev, in_ch); +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- if (in_ext != NULL) { +- PcapSourceWlanng *src = (PcapSourceWlanng *) in_ext; +- src->last_channel = in_ch; +- } +- +- return 0; +-} +- +-int chancontrol_wlanng_avs(const char *in_dev, int in_ch, char *in_err, void *in_ext) { +- // I really didn't want to do this... +- char cmdline[2048]; +- +- // Turn on rfmon on the initial channel +- snprintf(cmdline, 2048, "wlanctl-ng %s lnxreq_wlansniff channel=%d " +- "prismheader=false wlanheader=true stripfcs=false keepwepflags=false " +- "enable=true >/dev/null 2>&1", in_dev, in_ch); +- +- if (RunSysCmd(cmdline) < 0) { +- snprintf(in_err, 1024, "Unable to execute '%s'", cmdline); +- return -1; +- } +- +- if (in_ext != NULL) { +- PcapSourceWlanng *src = (PcapSourceWlanng *) in_ext; +- src->last_channel = in_ch; +- } +- +- return 0; +-} + #endif + + #ifdef SYS_OPENBSD +diff -urN kismet.dev/tcpstreamer.cc kismet.dev2/tcpstreamer.cc +--- kismet.dev/tcpstreamer.cc 2005-05-26 16:51:45.000000000 +0200 ++++ kismet.dev2/tcpstreamer.cc 2006-04-14 19:31:56.000000000 +0200 +@@ -30,8 +30,6 @@ + serv_fd = 0; + + max_fd = 0; +- +- gpsd = NULL; + } + + TcpStreamer::~TcpStreamer() +@@ -287,10 +285,6 @@ + hdr.frame_len = (uint32_t) htonl(sizeof(struct stream_version_packet)); + + vpkt.drone_version = (uint16_t) htons(STREAM_DRONE_VERSION); +- if (gpsd != NULL) +- vpkt.gps_enabled = 1; +- else +- vpkt.gps_enabled = 0; + + if (!FD_ISSET(in_fd, &client_fds)) + return -1; +diff -urN kismet.dev/tcpstreamer.h kismet.dev2/tcpstreamer.h +--- kismet.dev/tcpstreamer.h 2005-05-26 16:51:45.000000000 +0200 ++++ kismet.dev2/tcpstreamer.h 2006-04-14 19:31:56.000000000 +0200 +@@ -42,7 +42,6 @@ + #include "ringbuf.h" + #include "packet.h" + #include "packetstream.h" +-#include "gpsd.h" + + // Global in kismet_drone.cc + extern int silent; +@@ -76,9 +75,6 @@ + + int FetchDescriptor() { return serv_fd; } + +- // Register the GPS server for us to use +- void AddGpstracker(GPSD *in_gpsd) { gpsd = in_gpsd; } +- + void Kill(int in_fd); + + int Poll(fd_set& in_rset, fd_set& in_wset); +@@ -124,8 +120,6 @@ + fd_set client_fds; + + unsigned int max_fd; +- +- GPSD *gpsd; + }; + + #endif -- 2.30.2