===============================================================================
    $Id: README,v 1.4 2004/10/21 18:09:19 mike Exp $
===============================================================================

Hummingbird is a module-based asynchronous scanning engine. It is a generic
platform useful for scanning large sets of target devices in very short periods
of time. It was developed to greatly accelerate the speed in which 
request-response style scanning can be performed.

To build this baby you need:
libnet:     http://www.packetfactory.net/libnet
libpcap:    http://www.tcpdump.org
libxml2:    http://www.xmlsoft.org/downloads.html
libpthread: included

Hummingbird consists of two main parts, an injector and a listener. The
program starts in the main driver which operates according to the following
basic logic:

 1. Proccess command line and configuration file options
 2. Determine scanning module to be loaded
 3. Create and initialize listener control context
 4. Create and initialize injector control context
 5. Spin listener thread
 6. Spin injector thread
 7. Wait for injector to complete
 8. Terminate listener
 9. Report results to user
10. Exit

A scanning module is comprised of eight pieces (functions):

 1. The configuration file parsing function
    Parses the relevant section in the configuration file to process and load
    options into either the listener or injector contexts. This has to be 
    module specific since each module can have different user-defined data
    sections with different options.
 2. The listener user-defined data creation function 
 3. The injector user-defined data creation function
    Create the user-defined data structures. For any given scanner, there
    will some information that needs to be specific to the scan, either 
    statistical results that the listener will need to track, or monotonicly
    incrementing variables that the injector will need to update. 
 4. The injector user-defined data initialization function
 5. The injector user-defined data initialization function
    Initialize the user-defined data structures. The pcap filter, which is
    dependent on the scan details is stored here as well.
 6. The builder function
    Builds the packet or frames. Is called through every iteration by the
    injector.
 7. The decoder function
    Decodes the responses from the listener.
 8. The logfile reporting function
    Reads the results of the statistics from both contexts and appends this
    information to the end of the logfile.

EOF
