Provided by: bittwist_3.8-1_amd64 bug

NAME

       bittwiste -- pcap capture file editor

SYNOPSIS

       bittwiste [ -I input ] [ -O output ] [ -L layer ] [ -X payload ]
                 [ -C ] [ -M linktype ] [ -D offset ] [ -R range ]
                 [ -S timeframe ] [ -N repeat ] [ -G gaprange ] [ -P seed ]
                 [ -T header ] [ header-specific-options ] [ -h ]

DESCRIPTION

       This  document describes the bittwiste program, the pcap(3) capture file editor. Bittwiste
       is designed to work only with Ethernet frame, e.g. link type DLT_EN10MB in pcap(3), with a
       maximum frame size of 1514 bytes which is equivalent to an MTU of 1500 bytes, 14 bytes for
       Ethernet header.

       Bittwiste can currently edit Ethernet, ARP, IPv4,  IPv6,  ICMPv4,  ICMPv6,  TCP,  and  UDP
       headers.  IPv6  packets  with  extension headers or next header field not matching ICMPv6,
       TCP, or UDP are not supported; bittwiste will simply write such packets as  is  to  output
       trace file as it encounters them in the input trace file.

       If  run  with  the  -X  flag,  you  can append your own payload after any of the supported
       headers; specified using the -L and -T flag. Bittwiste will, if not run with the -C  flag,
       recalculate  the  checksums for IPv4, ICMPv4, ICMPv6, TCP, and UDP headers, except for the
       last fragment of a fragmented IPv4 datagram; bittwiste does not currently support checksum
       correction for the last fragment of a fragmented IPv4 datagram.

       While  parsing  the  packets  in  an  input trace file, bittwiste will skip, i.e. write to
       output trace file as is, any truncated packet,  for  example,  an  ICMPv4  packet  with  a
       captured  length  of  25  bytes  (we need at least 28 bytes; 14 bytes for Ethernet header,
       minimum 20 bytes for IP header, and 4 bytes  for  ICMPv4  header)  does  not  give  enough
       information  on  its  ICMPv4 header for bittwiste to read and modify it. In this case, you
       can utilize the -L and -T flag to copy the original packet up to its IP header and  append
       your  customized  ICMPv4  header and data to the packet using the -X flag. When specifying
       payload that covers the ICMPv4, ICMPv6, TCP, or UDP header  and  its  data,  you  can  use
       zeros,  e.g.  0000  for  2 bytes of zeros, for the header checksum which is then corrected
       automatically by bittwiste.

       In order to simplify the way options are  specified,  you  can  only  edit  packets  of  a
       specific  type  supplied to the -T flag per execution of bittwiste on an input trace file.
       In addition, the -T flag must appear last among the general options which are the -I,  -O,
       -L, -X, -C, -M, -D, -R, -S, -N, -G, and -P flag.

OPTIONS

       -I input
              Input pcap based trace file. Typically, input should be a file path to a pcap based
              trace file. However,  for  convenience,  the  following  template  names  are  also
              accepted to load trace file from one of the built-in templates:

              eth    : Ethernet header
              arp    : ARP header
              ip     : IPv4 header
              ip6    : IPv6 header
              icmp   : ICMPv4 header
              icmp6  : ICMPv6 header
              tcp    : IPv4 TCP header
              ip6tcp : IPv6 TCP header
              udp    : IPv4 UDP header
              ip6udp : IPv6 UDP header

              Example: -I icmp

       -O output
              Output trace file.

       -L layer
              Copy up to the specified layer and discard the remaining data. Value for layer must
              be either 2, 3, or 4 where 2 for Ethernet, 3 for ARP, IPv4,  or  IPv6,  and  4  for
              ICMPv4, ICMPv6, TCP, or UDP.

       -X payload
              Append payload in hex digits to the end of each packet.
              Example: -X 0302aad1
              -X flag is ignored if -L and -T flag are not specified.

       -C     Specify this flag to disable checksum correction. Checksum correction is applicable
              for non-fragmented supported packets only.

       -M linktype
              Replace the linktype stored in the pcap file header. Typically, value for  linktype
              is 1 for Ethernet.
              Example: -M 12 (for raw IP), -M 51 (for PPPoE)

              For the complete list, see:
              https://www.tcpdump.org/linktypes.html

       -D offset
              Delete the specified byte offset from each packet.
              First byte (starting from link layer header) starts from 1.
              -L, -X, -C and -T flag are ignored if -D flag is specified.
              Example: -D 15-40, -D 10, or -D 18-9999

       -R range
              Save only the specified range of packets.
              Example: -R 5-21 or -R 9

       -S timeframe
              Save  only  the  packets  within  the  specified  timeframe  with  up to one-second
              resolution using DD/MM/YYYY,HH:MM:SS as the  format  for  start  and  end  time  in
              timeframe.
              Example: -S 22/10/2006,21:47:35-24/10/2006,13:16:05
              -S flag is evaluated after -R flag.

       -N repeat
              Duplicate packets from the input trace file repeat times. Use this flag to create a
              stream of packets, each with, for example, a random tcp  sequence  number,  from  a
              1-packet trace file.
              Example: -N 100000
              -N flag is evaluated after -R and -S flag.

       -G gaprange
              Apply inter-packet gap between packets in microseconds from 1 to (2^31 - 1). Values
              in gaprange are inclusive and selected randomly. A single  value  implies  a  fixed
              gap.
              Example: -G 1000-10000 or -G 1000
              -G flag is evaluated after -R, -S, and -N flag.

       -P seed
              Positive  integer  to  seed the random number generator (RNG) used, for example, to
              generate random port number. If unset, current timestamp will be used  as  the  RNG
              seed.

              bittwiste  uses Mersenne Twister for high-speed uniformly distributed random number
              generation.

       -T header
              Edit only the specified header. Possible keywords for header  are,  eth,  arp,  ip,
              ip6, icmp, icmp6, tcp, or udp. -T flag must appear last among the general options.

       -h     Print version information and usage.

       header-specific-options
              Each  packet that matches the type supplied to the -T flag is modified based on the
              options described below:

              Options for eth (RFC 894):

              -d dmac or omac,nmac
                     Destination MAC address. If omac and nmac are specified,  any  instances  of
                     omac  in  the  destination MAC address field will be replaced with nmac. You
                     can also use the string 'rand' for a random MAC address.

                     Examples:
                     -d 00:08:55:64:65:6a
                     -d rand
                     -d 00:08:55:64:65:6a,rand

              -s smac or omac,nmac
                     Source MAC address. If omac and nmac are specified, any instances of omac in
                     the  source  MAC  address field will be replaced with nmac. You can also use
                     the string 'rand' for a random MAC address.

                     Examples:
                     -s 00:13:20:3e:ab:cf
                     -s rand
                     -s 00:13:20:3e:ab:cf,rand

              -t type
                     EtherType. Possible keywords for type are, ip, ip6, and arp only.

              Options for arp (RFC 826):

              -o opcode
                     Operation code in integer value between 0 to 65535. For example, you can set
                     opcode to 1 for ARP request, 2 for ARP reply.

              -s smac or omac,nmac
                     Sender MAC address. If omac and nmac are specified, any instances of omac in
                     the sender MAC address field will be replaced with nmac. You  can  also  use
                     the string 'rand' for a random MAC address.

                     Examples:
                     -s 00:13:20:3e:ab:cf
                     -s rand
                     -s 00:13:20:3e:ab:cf,rand

              -p sip or oip,nip
                     Sender IP address. Example: -p 192.168.0.1
                     If  oip and nip are specified, any instances of oip in the sender IP address
                     field will be replaced with nip.

              -t tmac or omac,nmac
                     Target MAC address. If omac and nmac are specified, any instances of omac in
                     the  target  MAC  address field will be replaced with nmac. You can also use
                     the string 'rand' for a random MAC address.

                     Examples:
                     -t 00:08:55:64:65:6a
                     -t rand
                     -t 00:08:55:64:65:6a,rand

              -q tip or oip,nip
                     Target IP address. Example: -q 192.168.0.2
                     If oip and nip are specified, any instances of oip in the target IP  address
                     field will be replaced with nip.

              Options for ip (RFC 791):

              -c ds_field
                     6-bit DS field (first 6-bit of 8-bit type of service field).

                     Some of the service class name mapping to ds_field value from RFC 4594:

                     0  : Standard (CS0)
                     8  : Low-priority data (CS1)
                     16 : OAM (CS2)
                     24 : Broadcast video (CS3)
                     32 : Real-time interactive (CS4)

                     Example:  -c  16 or -c 0x10 (to classify packet for operation and management
                     of the network)

                     For more information on DS field, see RFC 2474 and RFC 4594.

              -e ecn_field
                     2-bit ECN field (last 2-bit of 8-bit type of service field).

                     ecn_field can be set to one of the 4 values below:

                     0 : Not-ECT
                     1 : ECT(1)
                     2 : ECT(0)
                     3 : CE

                     Example: -e 3 or -e 0x03 (to indicate congestion to the end hosts)

                     For more information on ECN field, see RFC 3168.

              -i id or oi,ni
                     Identification in integer value between  0  to  65535.  If  oi  and  ni  are
                     specified,  any instances of oi in the identification field will be replaced
                     with ni. You can also use the string 'rand' for a random identification.

                     Example: -i 2000, -i rand, or -i 1000,rand

              -f flags
                     Control flags. Possible characters for flags are:

                     - : remove all flags
                     r : set the reserved flag
                     d : set the don't fragment flag
                     m : set the more fragment flag

                     Example: -f d
                     If  any  of  the  flags  is  specified,  all  original  flags  are   removed
                     automatically.

              -o offset
                     Fragment  offset  in  integer  value  between  0  to  7770. Value for offset
                     represents the number of 64-bit  segments  contained  in  earlier  fragments
                     which must not exceed 7770 (62160 bytes).

              -t ttl or ot,nt
                     Time  to live in integer value between 0 to 255 (milliseconds). If ot and nt
                     are specified, any instances of ot  in  the  time  to  live  field  will  be
                     replaced  with  nt.  You can also use the string 'rand' for a random time to
                     live.

                     Example: -t 64, -i rand, or -i 64,rand

              -p proto or op,np
                     Protocol number in integer value  between  0  to  255.  If  op  and  np  are
                     specified, any instances of op in the protocol number field will be replaced
                     with np. You can also use the string 'rand' for a  random  protocol  number.
                     Some common protocol numbers are:

                     1  : Internet Control Message (ICMP)
                     6  : Transmission Control (TCP)
                     17 : User Datagram (UDP)

                     For the complete list, see:
                     https://www.iana.org/assignments/protocol-numbers

              -s sip or oip,nip
                     Source IP address. If oip and nip are specified, any instances of oip in the
                     source IP address field will be replaced with nip.  If  CIDR  notation  (RFC
                     4632)  is  specified, e.g. 192.168.0.0/16, an IP address will be selected at
                     random from the range.

                     Examples:
                     -s 192.168.0.1
                     -s 127.0.0.1,192.168.0.0/16
                     -s 0.0.0.0/0 (random IPv4 throughout the entire range)

              -d dip or oip,nip
                     Destination IP address. If oip and nip are specified, any instances  of  oip
                     in  the  destination  IP  address  field  will be replaced with nip. If CIDR
                     notation (RFC 4632) is specified, e.g. 192.168.0.0/16, an IP address will be
                     selected at random from the range.

                     Examples:
                     -d 192.168.0.2
                     -d 127.0.0.2,192.168.0.0/16
                     -d 0.0.0.0/0 (random IPv4 throughout the entire range)

              Options for ip6 (RFC 8200):

              -c ds_field
                     6-bit DS field (first 6-bit of 8-bit traffic class field).

                     Some of the service class name mapping to ds_field value from RFC 4594:

                     0  : Standard (CS0)
                     8  : Low-priority data (CS1)
                     16 : OAM (CS2)
                     24 : Broadcast video (CS3)
                     32 : Real-time interactive (CS4)

                     Example:  -c  16 or -c 0x10 (to classify packet for operation and management
                     of the network)

                     For more information on DS field, see RFC 2474 and RFC 4594.

              -e ecn_field
                     2-bit ECN field (last 2-bit of 8-bit traffic class field).

                     ecn_field can be set to one of the 4 values below:

                     0 : Not-ECT
                     1 : ECT(1)
                     2 : ECT(0)
                     3 : CE

                     Example: -e 3 or -e 0x03 (to indicate congestion to the end hosts)

                     For more information on ECN field, see RFC 3168.

              -f flow_label
                     Flow label in integer value  between  0  to  1048575  or  hexadecimal  value
                     between 0x00000 to 0xfffff (20-bit).
                     Example: -f 0

                     Value  of  0 is to indicate that the packet does not belong to any flow. For
                     more information, see RFC 6437.

              -n next_header or on,nn
                     Next header number in integer value between 0 to  255.  If  on  and  nn  are
                     specified,  any  instances  of  on in the next header field will be replaced
                     with nn. You can also use the string 'rand' for a random next header number.
                     Example of next header numbers:

                     0  : IPv6 Hop-by-Hop Option (HOPOPT)
                     6  : Transmission Control (TCP)
                     17 : User Datagram (UDP)
                     50 : Encap Security Payload (ESP)
                     51 : Authentication Header (AH)
                     58 : ICMP for IPv6 (IPv6-ICMP)

                     For the complete list, see:
                     https://www.iana.org/assignments/protocol-numbers

              -h hop_limit or oh,nh
                     Hop limit in integer value between 0 to 255. If oh and nh are specified, any
                     instances of oh in the hop limit field will be replaced  with  nh.  You  can
                     also  use  the string 'rand' for a random hop limit. Destination host should
                     not discard a packet with hop limit equal to 0.

              -s sip or oip,nip
                     Source IP address. If oip and nip are specified, any instances of oip in the
                     source  IP  address  field  will be replaced with nip. If CIDR notation (RFC
                     4291) is specified, e.g. 2001:db8::/64, an IP address will  be  selected  at
                     random from the range.

                     Examples:
                     -s fd00::1
                     -s ::1,2001:db8::/64
                     -s ::/0 (random IPv6 throughout the entire range)

              -d dip or oip,nip
                     Destination  IP  address. If oip and nip are specified, any instances of oip
                     in the destination IP address field will  be  replaced  with  nip.  If  CIDR
                     notation  (RFC 4291) is specified, e.g. 2001:db8::/64, an IP address will be
                     selected at random from the range.

                     Examples:
                     -d fd00::2
                     -d ::2,2001:db8::/64
                     -d ::/0 (random IPv6 throughout the entire range)

              Options for icmp (RFC 792):

              -t type
                     Type of message in integer value between 0 to 255. Some common messages are:

                     0  : Echo reply
                     3  : Destination unreachable
                     8  : Echo
                     11 : Time exceeded

                     For the complete list, see:
                     https://www.iana.org/assignments/icmp-parameters

              -c code
                     Error code for this ICMPv4 message in integer value between 0  to  255.  For
                     example,  code  for  time  exceeded  message  may  have one of the following
                     values:

                     0 : transit TTL exceeded
                     1 : reassembly TTL exceeded

                     For the complete list, see:
                     https://www.iana.org/assignments/icmp-parameters

              Options for icmp6 (RFC 4443):

              -t type
                     Type of message in integer value between 0 to 255. Some common messages are:

                     3   : Time Exceeded
                     128 : Echo Request
                     129 : Echo Reply

                     For the complete list, see:
                     https://www.iana.org/assignments/icmpv6-parameters

              -c code
                     Code for this ICMPv6 message in integer value between 0 to 255. For example,
                     code for Time Exceeded message may have one of the following values:

                     0 : hop limit exceeded in transit
                     1 : fragment reassembly time exceeded

                     For the complete list, see:
                     https://www.iana.org/assignments/icmpv6-parameters

              Options for tcp (RFC 9293):

              -s sport or op,np
                     Source  port  number  in  integer value between 0 to 65535. If op and np are
                     specified, any instances of op in the source port  field  will  be  replaced
                     with np. You can also use the string 'rand' for a random port number.

                     Example: -s 2000, -s rand, or -s 1000,rand

              -d dport or op,np
                     Destination  port  number  in integer value between 0 to 65535. If op and np
                     are specified, any instances of op in the destination  port  field  will  be
                     replaced  with  np.  You  can  also  use the string 'rand' for a random port
                     number.

                     Example: -d 2000, -d rand, or -d 1000,rand

              -q seq or os,ns
                     Sequence number in integer value between 0 to 4294967295. If SYN control bit
                     is  set,  e.g.  character  s  is supplied to the -f flag, seq represents the
                     initial sequence number (ISN) and the first data byte is ISN + 1. If os  and
                     ns  are  specified, any instances of os in the sequence number field will be
                     replaced with ns. You can also use the string 'rand' for a  random  sequence
                     number.

                     Example: -q 100000, -q rand, or -q 100000,rand

              -a ack or oa,na
                     Acknowledgment  number  in  integer  value  between  0 to 4294967295. If ACK
                     control bit is set, e.g. character  a  is  supplied  to  the  -f  flag,  ack
                     represents  the  value  of  the  next  sequence  number that the receiver is
                     expecting to receive. If oa and na are specified, any instances of oa in the
                     acknowledgment  number  field will be replaced with na. You can also use the
                     string 'rand' for a random acknowledgment number.

                     Example: -a 100000, -a rand, or -a 100000,rand

              -f flags
                     Control flags. Possible characters for flags are:

                     - : remove all flags
                     c : congestion window reduced
                     e : explicit congestion notification echo
                     u : urgent pointer field is significant
                     a : acknowledgment field is significant
                     p : push function
                     r : resets the connection
                     s : synchronizes the sequence numbers
                     f : no more data from sender

                     Example: -f s
                     If  any  of  the  flags  is  specified,  all  original  flags  are   removed
                     automatically.

              -w win
                     Window  size in integer value between 0 to 65535. If ACK control bit is set,
                     e.g. character a is supplied to the -f flag, win represents  the  number  of
                     data  bytes,  beginning  with the one indicated in the acknowledgment number
                     field that the receiver is willing to accept.

              -u urg
                     Urgent pointer in integer value between 0 to 65535. If URG  control  bit  is
                     set,  e.g.  character u is supplied to the -f flag, urg represents a pointer
                     that points to the first data byte following the urgent data.

              Options for udp (RFC 768):

              -s sport or op,np
                     Source port number in integer value between 0 to 65535. If  op  and  np  are
                     specified,  any  instances  of  op in the source port field will be replaced
                     with np. You can also use the string 'rand' for a random port number.

                     Example: -s 2000, -s rand, or -s 1000,rand

              -d dport or op,np
                     Destination port number in integer value between 0 to 65535. If  op  and  np
                     are  specified,  any  instances  of op in the destination port field will be
                     replaced with np. You can also use the  string  'rand'  for  a  random  port
                     number.

                     Example: -d 2000, -d rand, or -d 1000,rand

SEE ALSO

       bittwist(1), pcap(3), tcpdump(1)

BUGS

       File your bug report and send to:

              Addy Yeow <ayeowch@gmail.com>

       Make sure you are using the latest stable version before submitting your bug report.

       When running bittwiste with both the -N and -G flags, large inter-packet gap may result in
       the packet timestamp beyond Unix epoch 2147483647 (2038-01-19 03:14:07 UTC)  to  overflow.
       This  is  due  to  the  use of signed 32-bit integer to store timestamp in pcap(3) header.
       Simply changing the data type,  e.g.  using  unsigned  64-bit  integer,  would  break  the
       compatibility of the output trace file with existing systems.

       The  workaround  built  into bittwiste is to use Unix epoch 946684800 (2020-01-01 00:00:00
       UTC) as the starting reference timestamp when -G flag is specified. This translates  to  a
       maximum  timespan  of  38  years or 559165 packets in the output trace file when using the
       maximum inter-packet gap, i.e. -G 2147483647.

COPYRIGHT

       Copyright (C) 2006 - 2023 Addy Yeow <ayeowch@gmail.com>

       This program is free software; you can redistribute it and/or modify it under the terms of
       the  GNU  General  Public  License  as  published  by the Free Software Foundation; either
       version 2 of the License, or (at your option) any later version.

       This program is distributed in the hope that it will be useful, but WITHOUT ANY  WARRANTY;
       without  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       See the GNU General Public License for more details.

       You should have received a copy of the GNU General Public License along with this program;
       if  not,  write  to  the  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
       Boston, MA  02110-1301, USA.

AUTHORS

       Original author and current maintainer:

              Addy Yeow

       The current version is available from https://bittwist.sourceforge.io

                                           6 July 2023                               BITTWISTE(1)