Github mirror of official Kismet repository
C++ C JavaScript Shell Makefile Python Other
Latest commit 0dbe91b Jun 22, 2017 @dragorn dragorn Alias open_source and close_source endpoints as enable_source and
        disable_source
Add disable source API to disable retry
Permalink
Failed to load latest commit information.
conf Add config option for web session timeout Jun 3, 2017
debian Add new deps Mar 7, 2016
docs Alias open_source and close_source endpoints as enable_source and Jun 22, 2017
extra Remove/shuffle lots of old extras/ stuff Aug 30, 2009
http_data Initial work on gadgets API Jun 22, 2017
kaitai Added kaitai runtime Apr 29, 2017
kaitai_definitions Add kaitai parser for wpa-eap (rsn and eapol) Apr 30, 2017
kaitai_parsers Add kaitai parser for wpa-eap (rsn and eapol) Apr 30, 2017
legacy-plugins Move old client plugin code May 8, 2017
legacy_client Deprecate old file Apr 4, 2017
legacy_code Move old patch code May 8, 2017
m4 Turn on C++11 (wow, this decade even!) Jun 9, 2016
man Applied spelling patches from ESR Aug 9, 2004
msgpack-1.4.1 I hate you, gitignore May 2, 2016
openwrt/kismet-new Fix file locations Jun 20, 2017
plugin-demo-webonly Add Makefile Jun 6, 2017
python Rename dot15d4 plugin Oct 11, 2012
rest_examples Added set_hop.cmd REST endpoint for simple interface control Jun 12, 2017
ruby update kismet_shootout Mar 17, 2015
scripts More readme work Apr 28, 2009
xml Fix xsd Feb 28, 2016
.gitignore ignore tweaks Jan 6, 2017
CHANGELOG Fixed channel fetch in ipwlive May 21, 2006
CMakeLists.txt Added cmakelist to make IDE happy (testing clion again) May 23, 2016
Makefile.in Fix test for plugins directories Jun 6, 2017
Makefile.inc.in Add -lz deps Apr 30, 2017
README Fix mixing of hop= and channel_hop= Jun 1, 2017
README.DEV.SERIALIZATION Rename some docs Apr 2, 2016
README.OLD Deprecate old readme, start new docs re: datasources Apr 19, 2017
README.SSL typo Mar 19, 2016
alertracker.cc Convert alert timestamps from second to double second.millisecond May 17, 2017
alertracker.h Convert alert timestamps from second to double second.millisecond May 17, 2017
alphanum.hpp Added alphanum library from http://www.davekoelle.com/files/alphanum.hpp Feb 25, 2017
apple80211.h First pass at adding osx/darwin support up-port from stable Jul 5, 2007
backward.h Switch from linux-specific backtrace code to 'backward' from Google Jun 22, 2017
base64.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
base64.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
battery.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
battery.h Added battery handling and battery protocol on server Jun 17, 2009
capture_framework.c Fix nearly every network service not handling nonblock reading loop + Jun 18, 2017
capture_framework.h Expand remote capture handshake to include UUID Jun 16, 2017
capture_linux_wifi.c Expand remote capture handshake to include UUID Jun 16, 2017
capture_pcapfile.c Fix stupid bug in pcapfile uuid generation Jun 16, 2017
channeltracker2.cc Update global fetch api Jun 4, 2017
channeltracker2.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
config.guess Updated config.guess and .sub Jan 6, 2013
config.h.bot Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
config.h.in Switch from linux-specific backtrace code to 'backward' from Google Jun 22, 2017
config.hpp.bot Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
config.hpp.in Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
config.sub Updated config.guess and .sub Jan 6, 2013
configfile.cc Added optional include directive (opt_include=...) which will not fail Jun 2, 2017
configfile.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
configure Switch from linux-specific backtrace code to 'backward' from Google Jun 22, 2017
configure.ac Switch from linux-specific backtrace code to 'backward' from Google Jun 22, 2017
cygwin_utils.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
cygwin_utils.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
datasource_linux_wifi.h Add kismet driver defs for datasource_linux_wifi Apr 14, 2017
datasource_pcapfile.h Minimal support for first rev of remote capture Jun 16, 2017
datasourcetracker.cc Alias open_source and close_source endpoints as enable_source and Jun 22, 2017
datasourcetracker.h Unify adding new sources properly Jun 16, 2017
devicetracker.cc Add option to look up phy based on name May 10, 2017
devicetracker.h Add option to look up phy based on name May 10, 2017
devicetracker_component.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
devicetracker_httpd.cc Add /devices/last-time/[ts]/devices.ekjson endpoint Jun 22, 2017
devicetracker_httpd_pcap.cc Added streamtracker hooks for other pcapng files May 16, 2017
devicetracker_httpd_pcap.h Functioning pcapng streaming via the rest endpoints! May 10, 2017
devicetracker_workers.cc Add lambda/c++ function<> based generic devicelist worker May 10, 2017
dumpfile.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_alert.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_alert.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_devicetracker.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_devicetracker.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_drone.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_gpsxml.cc Move a bunch of old code to legacy Apr 17, 2017
dumpfile_gpsxml.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_nettxt.cc Move a bunch of old code to legacy Apr 17, 2017
dumpfile_nettxt.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_netxml.cc Move a bunch of old code to legacy Apr 17, 2017
dumpfile_netxml.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_pcap.cc Fix pcap logging using old logging code May 15, 2017
dumpfile_pcap.h Fix pcap logging using old logging code May 15, 2017
dumpfile_string.cc Move a bunch of old code to legacy Apr 17, 2017
dumpfile_string.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
dumpfile_tuntap.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
endian_magic.h Split PPI headers into their own file Mar 23, 2009
entrytracker.cc back-propagate the field id into the builder May 15, 2017
entrytracker.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
filtercore.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
filtercore.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
finitestate.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
finitestate.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
getopt.cc Stubbed fetchannel, fixed include for PanelFront for OSX, added CXX a… Jun 4, 2003
getopt.h Fixed getopt finally by commenting out the conflicting definition Jun 4, 2003
globalregistry.cc Move a bunch of old code to legacy Apr 17, 2017
globalregistry.h Add template access to globals May 20, 2017
gps_manager.cc Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
gps_manager.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
gpsfake.cc Add virtual gps to git (oops!) Mar 16, 2016
gpsfake.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
gpsgpsd2.cc Revamp pollable remove to prevent removing the wrong object due to Apr 4, 2017
gpsgpsd2.h Revamp pollable remove to prevent removing the wrong object due to Apr 4, 2017
gpsserial2.cc Revamp pollable remove to prevent removing the wrong object due to Apr 4, 2017
gpsserial2.h Revamp pollable remove to prevent removing the wrong object due to Apr 4, 2017
gpsweb.cc Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
gpsweb.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
install-sh Initial revision Jul 22, 2002
interface_control.c Tweak ifup/down code Apr 25, 2017
interface_control.h Minimize includes, maybe solve redefinition error on some distros Apr 20, 2017
ipc_remote2.cc Further refinement of signal blocking; block sigchild during io loops Apr 25, 2017
ipc_remote2.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
json_adapter.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
json_adapter.h Remove self-inclusion Jun 21, 2017
json_parser_test.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kaitaistream.cc Disable iconv in kaitaistream Jun 20, 2017
kis_datasource.cc Alias open_source and close_source endpoints as enable_source and Jun 22, 2017
kis_datasource.h Alias open_source and close_source endpoints as enable_source and Jun 22, 2017
kis_dissector_ipdata.cc Move a bunch of old code to legacy Apr 17, 2017
kis_dissector_ipdata.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kis_dlt.cc Move a bunch of old code to legacy Apr 17, 2017
kis_dlt.h Move a bunch of old code to legacy Apr 17, 2017
kis_dlt_ppi.cc Move a bunch of old code to legacy Apr 17, 2017
kis_dlt_ppi.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kis_dlt_radiotap.cc Move a bunch of old code to legacy Apr 17, 2017
kis_dlt_radiotap.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kis_gps.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kis_gps.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kis_httpd_registry.cc Activate web module registry class Jun 5, 2017
kis_httpd_registry.h Work on plugin docs Jun 1, 2017
kis_httpd_websession.cc Add config option for web session timeout Jun 3, 2017
kis_httpd_websession.h Revamped session checking URIs May 22, 2017
kis_net_microhttpd.cc Expand stream buffer Jun 21, 2017
kis_net_microhttpd.h Fix session timeout crash Jun 16, 2017
kis_pktproto.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kis_ppi.h Initial merge of stable GPS PPI tagging code from Johnny Cache Dec 25, 2010
kismet.spec Updated spec file Mar 14, 2004
kismet_algorithm.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kismet_client.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kismet_drone.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kismet_json.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kismet_json.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
kismet_server.cc Switch from linux-specific backtrace code to 'backward' from Google Jun 22, 2017
kismet_server.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
linux_netlink_control.c Return -1 instead of chanlist not nl80211 Apr 30, 2017
linux_netlink_control.h Add frequency setting commands Apr 10, 2017
linux_wireless_control.c Minimal formatting Apr 25, 2017
linux_wireless_control.h Add regdom checking to linux wireless capture and return warning Apr 23, 2017
local_ieee80211_radiotap.h Started adding failure conditions to configure to force --disable-foo… Oct 10, 2005
macaddr.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
madwifing_control.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
madwifing_control.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
manuf.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
manuf.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
messagebus.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
messagebus.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
messagebus_restclient.cc Don't send MSGFLAG_LOCAL messages to the REST client May 20, 2017
messagebus_restclient.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
msgpack_adapter.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
msgpack_adapter.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
msgpuck.c Incorporate msgpuck library (pure-c msgpack and far simpler to deal with Mar 26, 2017
msgpuck.h Incorporate msgpuck library (pure-c msgpack and far simpler to deal with Mar 26, 2017
msgpuck_buffer.c Provide accessor for buffer Mar 28, 2017
msgpuck_buffer.h Provide accessor for buffer Mar 28, 2017
msgpuck_hints.c Incorporate msgpuck library (pure-c msgpack and far simpler to deal with Mar 26, 2017
nl80211.h Grab new nl80211.h from 'iw' source so that we can understand VHT Apr 6, 2017
packet.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
packet.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
packet_ieee80211.h Merged wpa1/2 and MCS rate decoding patch from Luigi Feb 15, 2016
packetchain.cc Remove debug prints May 10, 2017
packetchain.h Allow lambda-style packetchain functions May 4, 2017
packinfo_signal.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
pcapng_stream_ringbuf.cc Expand stream buffer Jun 21, 2017
pcapng_stream_ringbuf.h Start adding framework for stream monitoring May 15, 2017
phy_80211.cc Tweak device naming to not name devices after blank SSIDs Jun 20, 2017
phy_80211.h Add phy80211 per-bssid pcap May 11, 2017
phy_80211_dissectors.cc Remove some disabled code May 1, 2017
phy_80211_httpd_pcap.cc Added streamtracker hooks for other pcapng files May 16, 2017
phy_80211_httpd_pcap.h Add phy80211 per-bssid pcap May 11, 2017
phy_80211_packetsignatures.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
phy_rtl433.cc Activate web module registry class Jun 5, 2017
phy_rtl433.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
phy_zwave.cc Activate web module registry class Jun 5, 2017
phy_zwave.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
phyhandler.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
pipeclient.cc Fix heinous memory leak introduced w/ new read code Jun 18, 2017
pipeclient.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
plugintracker.cc Fix segv on missing plugin dir Jun 20, 2017
plugintracker.h Register plugin http content directories with new static directory Jun 6, 2017
pollable.h Cleanup of old pollable code Apr 4, 2017
pollabletracker.cc Remove extra debug info Apr 4, 2017
pollabletracker.h Cleanup of old pollable code Apr 4, 2017
psutils.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
psutils.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
ringbuf2.cc Fix deadlock issue, added non-locking internal functions Mar 5, 2016
ringbuf2.h Fix deadlock issue, added non-locking internal functions Mar 5, 2016
ringbuf_handler.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
ringbuf_handler.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
serialclient2.cc Revamp pollable remove to prevent removing the wrong object due to Apr 4, 2017
serialclient2.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
simple_datasource_proto.c Fix DLT endian more Jun 20, 2017
simple_datasource_proto.h Add encoding for DEFINITION for remote cap Jun 15, 2017
simple_ringbuf_c.c Remember how headers work and split functions out Mar 28, 2017
simple_ringbuf_c.h Remember how headers work and split functions out Mar 28, 2017
stamp-h.in Initial revision Jul 22, 2002
statealert.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
statealert.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
streamtracker.cc Use protocolerror instead of buffer error to propagate stream failures May 16, 2017
streamtracker.h Add pausing API for streams May 17, 2017
structured.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
system_monitor.cc Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
system_monitor.h Refactor Httpd_Stream_Handler to Httpd_CPPStream_Handler in prep for May 3, 2017
tcpclient2.cc Fix heinous memory leak introduced w/ new read code Jun 18, 2017
tcpclient2.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
tcpdump-extract.h Revamped how SSIDs are tracked May 14, 2006
tcpserver2.cc Fix heinous memory leak introduced w/ new read code Jun 18, 2017
tcpserver2.h Fix race condition in killing connection while polling connection Jun 15, 2017
timetracker.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
timetracker.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
trackedelement.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
trackedelement.h Properly add trackable items into the tracked element map May 2, 2017
trackercomponent_legacy.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
util.cc Added string join function Jun 6, 2017
util.h Added string join function Jun 6, 2017
uuid.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
version.h Tweaked enough to compile (but very broken otherwise) Feb 12, 2016
wifi_ht_channels.c 140 doesn't appear to support HT40+ Apr 18, 2017
wifi_ht_channels.h Split wifi_ht_channels into .c file because I remember how header-level Apr 10, 2017
xmlserialize_adapter.cc Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017
xmlserialize_adapter.h Move config.h into config.h and config.hpp for C++; required so we can Apr 4, 2017

README

Kismet 2017-??-??
Mike Kershaw <dragorn@kismetwireless.net>
https://www.kismetwireless.net

[ New kismet readme, in progress ]

**. Quick Setup Guide

    Kismet has many configuration knobs and options; but for the quickest
    way to get the basics working:

    1.  Install dependencies.  Kismet needs a number of libraries and 
        development headers to compile; these should be available in 
        nearly all distributions.  

        For Ubuntu:

        $ sudo apt-get install build-essential libmicrohttpd-dev git \
            libnl-3-dev libnl-genl-3-dev libcap-dev libpcap-dev \
            libncurses5-dev libnm-dev

    2.  Clone Kismet from git.  If you haven't cloned Kismet before:

        $ git clone https://www.kismetwireless.net/kismet.git

        If you have a Kismet repo already:

        $ cd kismet
        $ git pull

        Git may appear that it has hung while it downloads - just give it
        some time.  Typically a clone on a fast connection will take 
        2 to 5 minutes.

    3.  Run configure.  This will find all the specifics about your system
        and prepare Kismet for compiling.  If you have any missing dependencies
        or incompatible library versions, they will show up here.

        $ cd kismet
        $ ./configure

        Pay attention to the summary at the end and look out for any warnings.

    4.  Compile Kismet.  

        $ make

        You can accelerate the process by adding '-j #', depending on how many
        CPUs you have.  For instance on a quad-core system:

        $ make -j4

    5.  Install Kismet.  Generally, you should install Kismet as suid-root; 
        Kismet will automatically add a group and install the capture binaries
        accordingly.

        $ sudo make suidinstall

    6.  Put yourself in the Kismet group.

        $ sudo usermod -a -G kismet foouser

        This will add 'foouser' to the Kismet group.

    7.  Log out and back in.  Linux does not update groups until you log in; if
        you have just added yourself to the Kismet group you will have to 
        re-log in.

        Check that you are in the Kismet group with:

        $ groups

    8.  You're now ready to run Kismet!  Point it at your network interface:

        $ kismet -c wlan0

        THE FIRST TIME YOU RUN KISMET, it will generate a new, random password
        for your web interface.

        This password can be found in the config file:
        ~/.kismet/kismet_httpd.conf

        which is in the home directory of the user running Kismet.

        You will need this password to control Kismet from the web page - without
        it you can still view information about devices, view channel allocations,
        and most other actions, but you CAN NOT control Kismet data sources,
        view pcaps, or perform other actions.

    9.  Point your browser at http://localhost:2501

        You will be prompted to do basic configuration - Kismet has many options
        in the web UI which can be tweaked.

        To use all the features of the Kismet web UI, put in the password found
        in ~/.kismet/kismet_httpd.conf


00. Upgrading & Using Kismet Git-Master

    Kismet is undergoing a large number of changes, including the transition to 
    a new web-based UI, new capture system, and new internal tracking.

    The safest route is to remove any old Kismet version you have installed - 
    by uninstalling the package if you installed it via your distribution, or
    by removing it manually if you installed it from source (specifically,
    be sure to remove the binaries 'kismet_server', 'kismet_client',  and 
    'kismet_capture', by default found in '/usr/local/bin/' and the config 
    file 'kismet.conf', by default in '/usr/local/bin/'.

    You can then configure, and install, the new Kismet.  

    Some major changes in the Git code over the last stable release include:
   
        - New config format.  You should make sure to look at the new config
          and read about the changes in the README.
        - New web-based UI.  Kismet will now direct you to visit the web ui via
          http://localhost:2501
        - New packet capture system.  Kismet now uses an independent process for
          each capture source, and some packet source configuration options have
          changed.

    While heavy development is underway, the config file may change; generally
    breaking changes will be mentioned on Twitter and in the git commit logs.

xx. Installing Kismet - Suid vs Normal

    It is strongly recommended that Kismet never be run as root; instead use
    the Kismet suid-root installation method; when compiling from source it
    can be installed via:
        $ ./configure
        $ make
        $ sudo make suidinstall

    Keep reading for more details...

    Controlling network interfaces on most systems requires root, or super-user
    access.  

    While written with security strongly in mind, Kismet is a large and complex
    program, which handles possibly hostile data from the world.  This makes it
    a very bad choice to run as root.  
    
    To mitigate this, Kismet uses separate processes to control the network 
    interfaces and capture packets.  These capture programs are much smaller
    than Kismet itself, and do minimal (or no) processing on the contents of 
    the packets they receive.

    To install Kismet so that it can run as a normal user and use the helper
    binaries, install Kismet via:
        $ ./configure
        $ make
        $ sudo make suidinstall

    This will create a new group, 'kismet', and install capture tools which 
    need root access as suid-root but only runnable by users in the 'kismet' 
    group.

    This will allow anyone in the Kismet group to change the configuration of
    wireless interfaces on the system, but will prevent Kismet from running as
    root.

xx. Kismet Data Sources

    Kismet gets data (which can be packets, devices, or other information) from
    "data sources".

    Data sources can be created several ways:
        * source=foo in kismet.conf
        * -c foo on the command line when starting Kismet
        * via the web interface
        * scriptable via the REST api

    Source definitions look like:

        source=[interface]:[option, option, option]

    For example to capture from a Linux Wi-Fi device on 'wlan1' with no special
    options:

        source=wlan1

    To capture from a Linux Wi-Fi device on wlan1 while setting some special
    options, like telling it to not change channels and to go to channel 6
    to start with:

        source=wlan1:channel_hop=false,channel=6
        source=wlan1:channel_hop=false,channel=11HT-

    Different data sources have different options, read on for more information
    about the different capture sources Kismet supports.

    When no options are provided for a data source, the defaults are controlled 
    by settings in kismet.conf:

    channel_hop=true | false

        Controls if new sources enable channel hopping.  Because radios can only
        look at one channel at a time (typically), channel hopping jumps around
        the known channels.

        Typically, channel hopping should be turned on.  It can be turned off on
        individual data sources.

    channel_hop_speed=channels/sec | channels/min

        Channel hopping can happen either X times a second, or X times a minute.
        Slower channel hopping may capture more information on a busy channel, but
        will miss brief bursts of traffic on other channels; faster channel hopping
        may see more momentary traffic but will fail to capture complete records.

        By default, Kismet hops at 5 channels a second.

        Examples:
            channel_hop_speed=5/sec
            channel_hop_speed=10/min

    split_source_hopping=true | false

        Kismet can run with multiple interfaces for the same protocol - for instance,
        two, three, or even more Wi-Fi cards.  Typically it does not make sense to
        have multiple sources of the same type hopping to the same channel at the
        same time.  With split-hopping, Kismet will take the channel list for devices
        of the same type, and start each source at a different part of the channel
        list, maximizing coverage.

        Generally there is no reason to turn this off.

    randomized_hopping=true | false

        Generally, data sources retrieve the list of channels in sequential order.
        On some source types (like Wi-Fi), channels can overlap; hopping in a 
        semi-random order increases channel coverage by using overlap to spy on
        nearby channels when possible.

        Generally, there is no reason to turn this off.

    retry_on_source_error=true | false

        If true, Kismet will try to re-open a source which is in an error state
        after five seconds.
       
xx. Datasource: Linux Wi-Fi

    Wi-Fi Capture on Linux

    The Linux Wi-Fi data source handles capturing from Wi-Fi interfaces using the
    two most recent Linux standards:  The new netlink/mac80211 standard present
    since approximately 2007, and the legacy ioctl-based IW extensions system
    present since approximately 2002.

    Packet capture on Wi-Fi is accomplished via "monitor mode", a special mode 
    where the card is told to report all packets seen, and to report them at
    the 802.11 link layer instead of emulating an Ethernet device.

    The Linux Wi-Fi source will auto-detect supported interfaces by querying the
    network interface list and checking for wireless configuration APIs.  It
    can be manually specified with 'type=linuxwifi.

    The Linux Wi-Fi capture uses the 'kismet_cap_linux_wifi' tool, and should
    typically be installed suid-root:  Linux requires root to manipulate the
    network interfaces and create new ones.


    Supported Hardware

    Not all hardware and drivers support monitor mode, but many do.  Typically 
    any driver shipped with the Linux kernel supports monitor mode, and does so
    in a standard way Kismet understands.  If a specific piece of hardware does
    not have a Linux driver yet, or does not have a standard driver with monitor
    mode support, Kismet will not be able to use it.

    The Linux Wi-Fi source is known to support, among others:
        - All Atheros-based cards (ath5k, ath9k, ath10k with some restrictions, 
          USB-based atheros cards like the AR9271)
        - Modern Intel-based cards (all supported by the iwlwifi driver including
          the 3945, 4965, 7265, 8265 and similar)
        - Realtek USB devices (rtl8180 and rtl8187, such as the Alfa AWUS036H)
        - Realtek USB 802.11AC (rtl8812au), with some restrictions
        - RALink rt2x00 based devices
        - ZyDAS cards
        - Almost all drivers shipped with the Linux kernel

    It will NOT work with:
        - Raspberry Pi 3 or ZeroW built-in Wi-Fi using standard drivers.  The Broadcom
          embedded firmware does not support monitor mode.  It may be possible
          to get it working with the Nexmon driver project, available at: 
              https://github.com/seemoo-lab/nexmon
        - Most out-of-kernel drivers installed by a distribution outside of
          the normal kernel driver set.  Some distributions (raspbian for instance)
          package custom drivers for many of the cheaper USB Wi-Fi adapters, and
          these drivers do not support monitor mode.

    Many more devices should be supported - if yours isn't listed and works, let
    us know via Twitter (@kismetwireless).  


    Wi-Fi Source Parameters

    Linux Wi-Fi sources accept several options in the source definition:

    blockedchannels="a,b,c,d"

        Some Linux Wi-Fi drivers report channels which they then do not 
        actually support properly - specifically, the Intel 8265 seems to
        be guilty of this, and will actually crash the firmware of the NIC 
        when setting some channels.

        Channels found in the blockedchannels list will be excluded from the
        source, regardless of what channels the source claims to support.

        Note that the channels must be quoted:
            source=wlan1:blockedchannels="1,2,3,4,5,6,6HT40-"

        When passing the source definition via '-c' on the command line, the
        shell may remove quotes if they are not escaped:
            $ kismet -c wlan1:blockedchannels=\"1,2,3,4,5,6\"

    fcsfail=true | false

        mac80211-based drivers sometimes have the option to report packets 
        which do not pass the frame checksum, or FCS.  Generally these packets
        are garbage - they are packets which, due to in-air corruption due to
        collisions with other packets, have become corrupt.

        Usually there is no good reason to turn this on unless you are doing
        research on non-standard packets and hope to glean some sort of
        information from them.

    hop=true | false

        Enable channel hopping on this source.  If this is omitted, the source
        will use the global hopping option.

    hoprate=channels/sec | channels/min

        Like the global channel_hop_rate configuration option, this sets the 
        speed of channel hopping on this source only.  If this is omitted,
        the source will use the global hop rate.

    ignoreprimary=true | false

        mac80211-based drivers use multiple virtual interfaces to control
        behavior:  A single Wi-Fi interface might have 'wlan0' as the 
        "normal" Wi-Fi interface, and Kismet would make 'wlan0mon' as the
        capture interface.

        Typically, all non-monitor interfaces must be placed into a "down"
        state for capture to work reliably, or for channel hopping to work.

        In the rare case where you are attempting to run Kismet on the same
        interface as another mode (such as access point or client), you 
        may want to leave the base interface running.  If you set 
        "ignoreprimary=true" on the source, Kismet will not bring down the
        primary interface.

        This *almost always* must be combined with "hop=false" or setting
        channels will fail.

    plcpfail=true | false

        mac80211-based drivers sometimes have the ability to report events
        that may have looked like packets, but which have invalid low-level
        packet headers (PLCP).  Generally these events have no meaning, and
        very few drivers are able to report them.

        Usually there is no good reason to turn this on, unless you are 
        doing research attempting to capture Wi-Fi-like encoded data which
        is not actually Wi-Fi.

    uuid=AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE

        Assign a custom UUID to this source.  If no custom UUID is provided,
        a UUID is computed from the MAC address and the name of the datasource
        capture engine; the auto-generated UUID will be consistent as long as
        the MAC address of the capture interface remains the same.

    vif=foo

        mac80211-based drivers use multiple virtual interfaces to control 
        behavior.  Kismet will make a monitor mode virtual interface (vif)
        automatically, named after some simple rules:
            - If the interface given to Kismet on the source definition is
              already in monitor mode, Kismet will use that interface and
              not create a VIF
            - If the interface name is too long, such as when some 
              distributions use the entire MAC address as the interface name,
              Kismet will make a new interface named 'kismonX'
            - Otherwise, Kismet will add 'mon' to the interface; ie given an
              interface 'wlan0', Kismet will create 'wlan0mon'

        The 'vif=' option allows setting a custom name which will be used
        instead of creating a name.

    retry=true | false
        
        Automatically try to re-open this interface if an error occurs.  If the
        capture source encounters a fatal error, Kismet will try to re-open it in
        five seconds.  If this is omitted, the source will use the global retry
        option.


    Special Drivers

    Some drivers require special behavior - whenever possible, Kismet will detect
    these drivers and "do the right thing".

    - The rtl8812au driver (available at https://github.com/astsam/rtl8812au)
      supports monitor mode on these interfaces, however it appears to be 
      very timing sensitive.  Additionally, it supports creating mac80211 VIFs,
      but does NOT support capturing using them!  It will only support capturing
      from the base interface, which must be placed in monitor mode using
      the legacy ioctls.

      Additionally, the rtl8812au will sometimes refuse to tune to channels it
      reports as supported - other times it works as expected.  Kismet will continue
      despite intermittent errors.

xx. Data source: Pcapfile

    Pcap files are a standard format generated by libpcap, most commonly in
    conjunction with a tool like tcpdump, wireshark, or Kismet itself.

    Kismet can replay a pcapfile for testing, debugging, demo, or re-processing.

    The Pcapfile datasource will auto-detect pcap files and paths to files:
        $ kismet -c /tmp/foo.pcap

    It can be manually specified with 'type=pcapfile'

    The pcapfile capture uses the 'kismet_cap_pcapfile' tool which does not need
    special privileges.


    Pcapfile Options

    realtime=true | false

        Normally pcapfiles are replayed as quickly as possible.  Specifying the
        realtime=true option will slow the pcap file playback to match the original
        capture rate.

    retry=true | false
        
        Automatically try to re-open this interface if an error occurs.  If the
        capture source encounters a fatal error, Kismet will try to re-open it in
        five seconds.  If this is omitted, the source will use the global retry
        option.

        Pcap files will (obviously) contain the same content each time, so replaying
        typically will not cause devices to update.
    
    uuid=AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE

        Assign a custom UUID to this source.  If no custom UUID is provided,
        a purely random UUID is generated.


xx. Kismet Webserver

    Kismet now integrates a webserver which serves the web-based UI and data
    to external clients.

    THE FIRST TIME YOU RUN KISMET, it will generate a RANDOM password.  This
    password is stored in:
    ~/.kismet/kismet_httpd.conf

    which is in the home directory of the user which ran Kismet.

    You will need this password to log into Kismet for the first time.

    The webserver is configured via the kismet_httpd.conf file.  These options
    may be included in the base kismet.conf file, but are broken out for
    clarity.

    By default, Kismet does not run in SSL mode.  If you provide a certificate
    and key file in PEM format, Kismet supports standard SSL / HTTPS.  For more
    information on creating a SSL certificate, look at:
        README.SSL

    HTTP configuration options:

    httpd_username=username

        Set the username.  This is required for any actions which can change
        configuration (adding / removing data sources, changing server-side
        configuration data, downloading packet captures, etc).

        The default user is 'kismet', and by default, the httpd_username= and
        httpd_password= configuration options are stored in the 
        users home directory, in ~/.kismet/kismet_httpd.conf.

    httpd_password=password

        Set the password.  The first time you run Kismet, it will auto-generate
        a random password and store it in ~/.kismet/kismet_httpd.conf .

        It is generally preferred to keep the username and password in the
        per-user configuration file, however they may also be set here in 
        the global config.

        If httpd_username or httpd_password is found in the global config, it is
        used instead of the per-user config value.

    httpd_port=port

        Sets the port for the webserver to listen to.  By default, this is
        port 2501, the port traditionally used by the Kismet client/server
        protocol.

    httpd_ssl=true|false

        Turn on SSL.  If this is turned on, you must provide a SSL certificate
        and key in PEM format with the httpd_ssl_cert and httpd_ssl_key 
        configuration options.

        See README.SSL for more information about SSL certificates.

    httpd_ssl_cert=/path/to/cert.pem

        Path to a PEM-format SSL certificate.  
        
        This option is ignored if Kismet is not running in SSL mode.

        Logformat escapes can be used in this.  Specifically, "%S" 
        will automatically expand to the system install data directory,
        and "%h" will expand to the home directory of the user running
        Kismet.

        Example:
            httpd_ssl_cert=%h/.kismet/kismet.pem

    httpd_ssl_key=/path/to/key.pem

        Path to a PEM-format SSL key file.  This file should not have a
        password set.  
        
        This option is ignored if Kismet is not running in SSL mode.

        Logformat escapes can be used in this.  Specifically, "%S" 
        will automatically expand to the system install data directory,
        and "%h" will expand to the home directory of the user running
        Kismet.

        Example:
            httpd_ssl_key=%h/.kismet/kismet.key
   
    httpd_home=/path/to/httpd/data

        Path to static content web data to be served by Kismet.  This is
        typically set automatically to the directory installed by Kismet 
        in the installation prefix.

        Logformat escapes can be used in this.  Specifically, "%S" will 
        automatically expand to the system install data directory.  By
        default this should be:
            httpd_home=%S/kismet/httpd/

        Typically the only reason to change this directory is to replace
        the Kismet web UI with alternate code.

    httpd_user_home=/path/to/user/httpd/data

        Path to static content stored in the home directory of the 
        user running Kismet.  This is typically set to the httpd directory
        inside the users .kismet directory.

        This allows plugins installed to the user directory to install
        web UI components.

        Logformat escapes can be used in this.  Specifically, "%h" will
        expand to the current users home directory.  By default this should
        be:
            httpd_user_home=%h/.kismet/httpd/

        Typically there is no reason to change this directory.

        If you wish to disable serving content from the user directory 
        entirely, comment this configuration option out.

    httpd_session_db=/path/to/session/db

        Path to save HTTP sessions to.  This allows Kismet to remember valid
        browser login sessions over restarts of kismet_server. 

        If you want to refresh the logins (and require browsers to log in 
        again after each restart), comment this option.

        Typically there is no reason to change this option.

        Logformat escapes can be used in this.  Specifically, "%h" will 
        expand to the current users home directory.  By default this
        should be:
            httpd_session_db=%h/.kismet/session.db

    httpd_mime=extension:mimetype

        Kismet supports MIME types for most standard file formats, however if
        you are serving custom content with a MIME type not correctly set,
        additional MIME types can be defined here.

        Multiple httpd_mime lines may be used to add multiple mime types.

        Example:
            httpd_mime=html:text/html
            httpd_mime=svg:image/svg+xml

        Typically, MIME types do not need to be added.

xx. GPS

    Kismet can integrate with a GPS device to provide geolocation coordinates
    for devices.

    GPS data is included in the log files, in PPI pcap files, and exported
    over the REST interface.

    Kismet can not use GPS to determine the absolute location of the device;
    it can only use it to determine the location of the receiver.  The 
    location estimate of a device can be improved by circling the suspected
    location.

    In addition to logging GPS data on a per-packet basis, Kismet maintains a
    running average of device locations which are exported as the average
    location in the Kismet UI and in device summaries.  Because the running
    average can be heavily influenced by the sensors position, this running
    average may not be very accurate.


    Multiple GPS devices can be defined at once, however only the highest 
    priority active device is used.

    GPS is configured via the 'gps=' configuration option.  GPS options are
    passed on the configuration line:
        gps=type:option1=val1,option2=val2

    Supported GPS types are:

    serial (High priority)
        Locally-connected serial NMEA GPS device.  This supports most
        USB and Bluetooth (rfcomm/spp) connected GPS devices.  This does
        not support the few GPS devices which output proprietary binary

        Options:

        name=foo
            Arbitrary name to identify this GPS device.

        device=/path/to/device
            Path to the serial device.  The user Kismet is running as must
            have access to this device.

        reconnect=true|false
            Automatically re-open the serial port if there is a problem with
            the GPS or if it is disconnected.

        baud=rate
            Specify a baud rate for the serial port.  Most serial GPS devices
            operate at 4800, which Kismet uses by default.  If your device
            is special, set the baud rate here.

        Example:

        gps=serial:device=/dev/ttyACM0,reconnect=true,name=LaptopSerial

    gpsd (High priority)
        A GPSD server.  GPSD (http://www.catb.org/gpsd/) parses GPS
        data from multiple GPS vendors (including proprietary binary)
        and makes it available over a standard TCP/IP connection.

        There are multiple GPSD versions with various levels of support
        and incompatible protocols.  Kismet supports the older-style GPSD
        text protocol as well as the new GPSD3 JSON protocol.

        Options:

        name=foo
            Arbitrary name to identify this GPS device.

        host=hostname-or-ip
            Hostname or IP of GPSD host.

        port=port
            GPSD port.  GPSD listens on port 2947 by default.

        reconnect=true|false
            Automatically reconnect to the GPSD server if the connection
            is lost.

        Example:

        gps=gpsd:host=localhost,port=2947,reconnect=true

    web (Medium priority)
        A web-based client with a modern web browser and location hardware 
        (such as a phone) can supply their GPS location.  This is only 
        available to logged-in users on the Kismet web UI, but can turn a
        generic phone and web browser into a location source.

        Typically browsers cannot supply speed or other options, and the
        precision of this GPS source will be reduced because it may not
        be updated as frequently as a locally connected GPS.

        Options:

        name=foo
            Arbitrary name to identify this GPS device.

        Example:

        gps=web:name=web
        -or-
        gps=web

    virtual (lowest priority)
        A virtual GPS always reports a static location.  The virtual gps
        injects location information on stationary sensor or drone.

        Options:

        name=foo
            Arbitrary name to identify this GPS device.

        lat=coordinate
            Latitude coordinate.

        lon=coordinate
            Longitude coordinate.

        alt=altitude
            Altitude, in meters.

        Example:

        gps=virtual:lat=123.4566,lon=40.002,alt=23.45