SendIP
Author:  Mike Ricketts <mike@earth.li>
Web:     http://www.earth.li/projectpurple/progs/sendip.html
Part of Project Purple. (http://www.earth.li/projectpurple/)

1. Introduction

   SendIP is a tool to send completely arbitrary packets out over the network.
   In conjunction with PackPrint (see
   http://www.earth.li/projectpurple/progs/packprint.html), this makes an
   extremely powerful debugging tool for networks.

1.1 Home page

   All the latest news, documentation and versions of SendIP will be made
   available from http://www.earth.li/projectpurple/ or directly from the
   the author.

   Please, if you find SendIP useful, consider visiting making a donation
   at http://heaven.on.earth.li/donate.  The more donations I get the more
   time I can afford to spend improving SendIP!

2. Protocols

   Here is a list of protocols that SendIP currently understands:
   * IPv4 (but see below section 7)
   *   TCP
   *     BGP
   *   ICMP
   *   UDP
   *     RIP
   *     NTP
   * IPv6 (except on solaris)
   *   ICMPv6
   *   TCP
   *   UDP
   *     RIPng
   *     NTP?

   Other protocols will be added in future versions, as and when I have time
   to add them.

   Of course, it is still possible to send packets using other protocols, but
   you have to construct the packet data and headers entirely by hand.

3. Usage instructions

   SendIP can take a huge number of commandline parameters.  For this reason,
   future versions may have some sort of user interface...

   Please read the man page or sendip -h for details.  They are not documented
   here because they change often between versions and I can't be bothered to
   keep this up to date.

4. Installation

   make ; make install should work.
   You MUST use GNU make.
   On Solaris you need to use gcc-3.x or above, and GNU binutils.
   On other platforms, you probably need gcc-2.x or above.

   If you have install problems on Solaris, try:
     make install INSTALL=/usr/ucb/install

   If  you can't persuade it to compile or install, mail me with details of
   what goes wrong, and what system you are trying to install it on.
   By this I mean at least:
   - output of make -k veryclean all install
   - OS, including version
   - version of make, gcc, etc
   - version of sendip
   - anything else you think might be relevant

   You can change where it installs by changing BINDIR and/or PREFIX at the
   top of the Makefile.

   A .spec file is included to build RPMS, and source and binary RPMS are
   also available from the web page.  Debian packages are also available, and
   sendip is included in the FreeBSD ports collection.

5. Problems, Bugs, and Comments

   If you have any comments, suggestions, or bug reports, please email me.

   Please, when sending bug reports include all the relevant information so
   I have a hope of reproducing or fixing the bug.  I need at least:
   - output of make -k veryclean all install (if you installed from source)
   - OS, including version and platform
   - glibc version if you are on linux
   - sendip version
   - exact command line that fails
   - exact error messages, if any
   - exactly what you expected to happen that didn't, or what didn't happen
     that you expected
   - anything else that might be relevant
   Make sure you have read section 7 of this README first.

   The email address I currently use is mike@earth.li

   I am interested in any feedback in order to improve SendIP.

6. License

   SendIP is distributed under the GNU Public License a copy of which is
   included in this archive as LICENSE.

7. Note on IPv4 options

   Many operating systems rewrite some or all of the IP header when sending
   packets.  Exactly which headers get rewritten depends on the OS.  There is
   no portable way to bypass this that I am aware of. so some IP options do not
   work on some operating systems.  Listed below are the ones I know about.
   This list is not by any means complete and what is here may not be accurate,
   and I would welcome more information.

   Linux, *BSD:
   - IP source address is rewritten if it is zero.
   - IP checksum is always rewritten to the correct value.
   - IP packet ID is rewritten (to a randomish value) if it is zero.
   - Total packet length is always rewritten to the number of bytes sent.
   - All other headers work as expected.

   Solaris:
   - IP source address is rewritten if it is zero.
   - IP header length works provided that the length given is not greater
     than the number of bytes in the packet.  If it is, sendip will segfault.
   - IP don't fragment flag always set, other IP flags always cleared.
   - IP checksum is always rewritten to the correct value.
   - IP packet ID is rewritten (to a randomish value) if it is zero.
   - Total packet length is always rewritten to the number of bytes sent.
   - All other headers work as expected.
