- Sensible defaults.
- Manual page. (DONE, but on-going)
- Command-line argument processing is a mess. How to improve it? Use a parser
  that mimics tcpdump expressions???
- support UDP and ICMP as well (DONE)
- support layer 2 (DONE)
- GRE, MPLS - ask Darrin (DONE)
- Only 2 TCP options implemented. What others would be useful? (DONE)
- Should I add support for IP options? (Yes! DONE)
- Output options:
 * To stdout (raw) (DONE)
 * To stdout (in hex) (DONE)
 * To pcap file. (DONE)
 * The real thing, to the wire (partially DONE. Need to fix non-Linux platforms)
- Read options from a file. (DONE! - was "complicated", but it's done :-)
- Output specific PDUs from the final packet, like from UDP and up.
- More than 3 PDUs? (what if I want to create a custom BGP packet?)
  (don't know what this was, but it's DONE - I can create a BGP message
  just fine)
- Test suite (open valid PCAP file and use ttt to create same PCAP file.)
- Support IP and TCP options from a file (nemesis' -O option)
- The -P option should be more flexible. Maybe "-P file:payload.dat", or
  "-P data:'1 2 3 4'", or "-P repeat:'blah -times 5'"
- Debian packaging (DONE)
- configure switchs --with-pcap --with-ssl (and --without-xxx equivalents)
- A GUI?
- Add a numspec for IP addresses
- Add randomness to numspec, i.e. a default and then a probability of
  getting that default (see pysic) (DONE)
- Portability (ongoing)
- Better error handling. Right now all errors cause error() to be called,
  which ends the program.
- Ability to define multiple packets on the command line or in a command
  file. Need to have a global array of PDUs for this and need to introduce
  a new option "--eop" or "--end-of-packet". (DONE!)
- Migrate to popt (DONE)
- Implement --nocksum. Make it a flag in the PDU structure so it can be 
  specified for any PDU. (DONE)
- --only-first n (DONE)
- Ability to specify "auto" for lengths and checksums. (DONE)
- Design a way to have each PDU handle processing of its command line
  options. This should be a modular, per-PDU thing, instead of making
  options.c bigger and bigger with each new PDU. (DONE)
- Some of the PDUs require a complex specification when the PDU is
  being created on the command line (or command file.) We need
  to be able to provide on-line help that describes this complex
  specification. For example:

-------------------------- Begin example -----------------------------
$ ttt --icmpv6-router-renum help
Creates an ICMPv6 router renumbering message. Takes as parameter
a message specification that has the following format:

<code>,<sequence #>,<segment #>,max delay[,flags]

All parameters are numbers with the exception of the flags field.

flags can be: "test", "proceed", "result", "all" and "site".
They can be in any order but must be separated by ':'.

For example:

1,1,0,50000,test:proceed

1 sets the code to 1 for a Rouer Renumbering Result
1 sets the sequence number
0 sets the segment number
50000 sets the max delay in milliseconds
"test" sets the T flag - test command
"proceed" sets the P flag - Proceed previously

In this example the R, A and S flags are set to 0.
---------------------------- End example -----------------------------

- Signal handling so a Tcl command can be interrupted.

- Create a PDU Tcl object type as well as commands to handle them (done)

- Provide a way to generate a packet from a Tcl PDU object type (done)

- Provide a way to modify a generated packet (barray command?)

From Shiva:

There are a couple tools I need to write to continue analyzing the
traffic I’ve captured. Suggestions welcome:

    * I need to be able to extract HTTP payloads from a pcap. It should
    be pretty easy to re-use Wireshark’s TCP Stream reassembly to get
    the TCP layer. With that done, I could easily get the HTTP layer…
    then maybe I can hand it to some Mozilla libs to be ungzipd,
    unchuncked, etc. It would be pretty awesome if this was built into
    scapy though but to my knowledge it isn’t.

    * I need to fake DNS responses at “runtime”. I’m sure there
    are honeynet tools that do this and I could config a “malicious”
    DNS server just a easily.
