BITTWISTE(1)                General Commands Manual               BITTWISTE(1)



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  Ether-
       net header.

       Bittwiste  can  currently edit Ethernet, VLAN, 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 exam-
       ple, 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
              vlan   : VLAN 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
              and VLAN, 3 for ARP, IPv4, or IPv6, and 4  for  ICMPv4,  ICMPv6,
              TCP, or UDP.

       -X payload or range or range:payload
              Append payload in hex digits to the end of each packet. If range
              is specified, e.g. 0-1000, a random payload with a size  between
              0  and 1000 bytes (inclusive) will be generated for each packet.
              If range:payload is specified, e.g. 0-1000:0302aad1,  a  payload
              of  random  size between 0 to 1000 bytes will be generated, con-
              taining a repeated sequence of the specified bytes (0x0302aad1).
              The maximum payload size is 65535 bytes.

              Examples:
              -X 0302aad1
              -X 0-1000
              -X 20-20
              -X 0-1000:00
              -X 0-1000:ff
              -X 0-1000:0302aad1

              -X flag is ignored if -L and -T flag are not specified.

       -C     Specify  this flag to disable checksum correction. Checksum cor-
              rection 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 0 to
              (2^31 - 1). Values in gaprange are inclusive and  selected  ran-
              domly. 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 (0 to 2^32 - 1) to seed the random number gen-
              erator (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 dis-
              tributed random number generation.

       -T header
              Edit only the specified header.  Possible  keywords  for  header
              are,  eth, vlan, 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 or ot,nt
                     EtherType in integer value between 0 to 65535 or hexadec-
                     imal value between 0x0000 to 0xffff (16-bit). If  ot  and
                     nt  are  specified,  any instances of ot in the EtherType
                     field will be replaced with nt. You can  use  the  string
                     'rand'  for  a  random  EtherType. Following keywords are
                     also accepted:

                     vlan : 0x8100 (802.1Q VLAN)
                     ctag : 0x8100 (802.1ad VLAN C-TAG for Q-in-Q)
                     stag : 0x88a8 (802.1ad VLAN S-TAG for Q-in-Q)
                     ip   : 0x0800
                     ip6  : 0x86dd
                     arp  : 0x0806

                     Examples:
                     -t ip
                     -t 0x0800
                     -t rand
                     -t 0x0800,rand

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

              Options for vlan (IEEE 802.1Q, 802.1ad):

              -i id or oi,ni
                     VLAN ID in integer value between 0 to 4095. If oi and  ni
                     are  specified,  any instances of oi in the VLAN ID field
                     will be replaced with ni. You can use the  string  'rand'
                     for a random VLAN ID. This option can be repeated up to 4
                     times to edit stacked VLAN headers, i.e. Q-in-Q.

                     Examples:
                     -i 2000
                     -i rand
                     -i 1000,rand
                     -i 100 -i 200 (outer S-TAG = 100, inner C-TAG = 200)

              -d dei or od,nd
                     VLAN DEI (drop eligible indicator; also known as CFI  for
                     canonical  format indicator). Value must be 0 or 1. If od
                     and nd are specified, any instances of od in the VLAN DEI
                     field  will  be  replaced with nd. You can use the string
                     'rand' for a random VLAN DEI. This option can be repeated
                     up to 4 times to edit stacked VLAN headers, i.e. Q-in-Q.

                     Examples:
                     -d 0
                     -d rand
                     -d 1,rand
                     -d 0 -d 1

              -p pcp or op,np
                     VLAN PCP (priority code point) in integer value between 0
                     to 7. If op and np are specified, any instances of op  in
                     the  VLAN PCP field will be replaced with np. You can use
                     the string 'rand' for a random VLAN PCP. This option  can
                     be  repeated  up to 4 times to edit stacked VLAN headers,
                     i.e. Q-in-Q.

                     Mapping of pcp value from IEEE P802.1p:

                     0 : Best effort
                     1 : Background
                     2 : Excellent effort
                     3 : Critical applications
                     4 : Video, < 100 ms latency and jitter
                     5 : Voice, < 10 ms latency and jitter
                     6 : Internetwork control
                     7 : Network control

                     Examples:
                     -p 2
                     -p rand
                     -p 3,rand
                     -p 7 -p 0

              -t type or ot,nt
                     Encapsulated EtherType in  integer  value  between  0  to
                     65535  or  hexadecimal  value  between  0x0000  to 0xffff
                     (16-bit). If ot and nt are specified, any instances of ot
                     in the encapsulated EtherType field will be replaced with
                     nt. You can use the string 'rand' for a  random  encapsu-
                     lated EtherType. Following keywords are also accepted:

                     vlan : 0x8100 (802.1Q VLAN)
                     ctag : 0x8100 (802.1ad VLAN C-TAG for Q-in-Q)
                     stag : 0x88a8 (802.1ad VLAN S-TAG for Q-in-Q)
                     ip   : 0x0800
                     ip6  : 0x86dd
                     arp  : 0x0806

                     This option can be repeated up to 4 times to edit stacked
                     VLAN headers, i.e. Q-in-Q.

                     Examples:
                     -t ip
                     -t 0x0800
                     -t rand
                     -t 0x0800,rand
                     -t ctag -t ip

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

              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  opera-
                     tion 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 identi-
                     fication 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 con-
                     tained 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 (millisec-
                     onds). 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 com-
                     mon 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  in-
                     stances of oip in the source IP address field will be re-
                     placed with nip. If CIDR notation (RFC  4632)  is  speci-
                     fied, 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 se-
                     lected 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  opera-
                     tion 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 hexa-
                     decimal 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. Exam-
                     ple 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  in-
                     stances of oip in the source IP address field will be re-
                     placed with nip. If CIDR notation (RFC  4291)  is  speci-
                     fied,  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 se-
                     lected 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 be-
                     tween 0 to 255. For example, code for time exceeded  mes-
                     sage 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  num-
                     ber  (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,  begin-
                     ning  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. Sim-
       ply 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 - 2024 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 MER-
       CHANTABILITY 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



                                1 November 2024                   BITTWISTE(1)