123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- autogen definitions options;
- copyright = {
- date = "2004-2007";
- owner = "Aaron Turner";
- type = "bsd";
- author = <<- EOText
- Copyright 2000-2007 Aaron Turner
- For support please use the tcpreplay-users@lists.sourceforge.net mailing list.
- The latest version of this software is always available from:
- http://tcpreplay.synfin.net/
- EOText;
- };
- package = "flowreplay";
- prog-name = "flowreplay";
- prog-title = "Connect to servers based on network traffic stored in pcap files";
- long-opts;
- gnu-usage;
- help-value = "H";
- save-opts-value = "";
- load-opts-value = "";
- argument = "<pcap_file(s)>";
- config-header = "config.h";
- include = "#include \"defines.h\"\n"
- "#include \"flowreplay.h\"\n"
- "#include \"common.h\"\n"
- "#include \"config.h\"\n"
- "extern flowreplay_opt_t options;\n";
- homerc = "$$/";
- explain = <<- EOExplain
- flowreplay is a tool for using network traffic stored in pcap(3) files as
- the basis for replaying connections to servers.
- EOExplain;
- detail = <<- EODetail
- Please note that flowreplay is currently in *alpha*. As such, it is still
- very much a work in progress and currently will not work for most uses. If
- you have the skill and interest to help make flowreplay work better, please
- contact Aaron Turner.
- For more details, please see the Tcpreplay Manual at:
- http://tcpreplay.synfin.net/trac/wiki/manual
- EODetail;
- flag = {
- ifdef = DEBUG;
- name = dbug;
- value = d;
- arg-type = number;
- max = 1;
- immediate;
- arg-range = "0->5";
- arg-default = 0;
- descrip = "Enable debugging output";
- doc = <<- EOText
- If configured with --enable-debug, then you can specify a verbosity
- level for debugging output. Higher numbers increase verbosity.
- EOText;
- };
- /* Verbose decoding via tcpdump */
- flag = {
- ifdef = ENABLE_VERBOSE;
- name = verbose;
- value = v;
- max = 1;
- immediate;
- descrip = "Print decoded packets via tcpdump to STDOUT";
- settable;
- doc = "";
- };
- flag = {
- ifdef = ENABLE_VERBOSE;
- name = decode;
- flags-must = verbose;
- value = A;
- arg-type = string;
- max = 1;
- descrip = "Arguments passed to tcpdump decoder";
- doc = <<- EOText
- When enabling verbose mode (@var{-v}) you may also specify one or more
- additional arguments to pass to @code{tcpdump} to modify the way packets
- are decoded. By default, -n and -l are used. Be sure to
- quote the arguments like: -A "-axxx" so that they are not interpreted
- by tcpreplay. The following arguments are vaild:
- [ -aAeNqRStuvxX ]
- [ -E spi@ipaddr algo:secret,... ]
- [ -s snaplen ]
- EOText;
- };
- flag = {
- name = mode;
- value = m;
- arg-type = string;
- max = 1;
- must-set;
- descrip = "Replay mode";
- doc = <<- EOText
- Flowreplay needs to know handle client/server exchanges to properly time.
- The options are:
- @table @bullet
- @item @var{send}
- Replay traffic as fast as possible. Do not wait for server to reply.
- @item @var{wait}
- Wait @var{--wait} sec.usec for the server to reply before sending.
- @item @var{bytes}
- Wait until the server has sent the number of bytes stored in the pcap file.
- @item @var{user}
- Send packets based on user interaction.
- @end table
- EOText;
- flag-code = <<- EOText
- if (strcasecmp(OPT_ARG(MODE), "send") == 0) {
- options.sendmode = MODE_SEND;
- } else if (strcasecmp(OPT_ARG(MODE), "wait") == 0) {
- options.sendmode = MODE_WAIT;
- } else if (strcasecmp(OPT_ARG(MODE), "bytes") == 0) {
- options.sendmode = MODE_BYTES;
- } else if (strcasecmp(OPT_ARG(MODE), "user") == 0) {
- options.sendmode = MODE_USER;
- } else {
- errx(1, "Invalid --mode: %s", OPT_ARG(MODE));
- }
- EOText;
- };
-
- flag = {
- name = wait;
- value = w;
- arg-type = string;
- max = 1;
- default = "2.0";
- descrip = "Number of sec.usec to wait between client's turn to send";
- doc = <<- EOText
- If @var{--mode} is @var{wait}, then you can specify the amount of time to
- wait for the server to complete it's side of the transaction before starting
- to send the client side again.
- EOText;
- flag-code = <<- EOText
- float2timer(atof(OPT_ARG(WAIT)), &options.timeout);
- EOText;
- };
- flag = {
- name = targetip;
- value = t;
- arg-type = string;
- max = 1;
- must-set;
- descrip = "Target host to connect to";
- flag-code = <<- EOText
- #ifdef INET_ATON
- if (inet_aton(OPT_ARG(TARGETIP), &options.targetaddr) == 0)
- errx(1, "Invalid target IP address: %s", OPT_ARG(TARGETIP));
- #else
- if ((options.targetaddr.s_addr = inet_addr(OPT_ARG(TARGETIP))) == -1)
- errx(1, "Invalid target IP address: %s", OPT_ARG(TARGETIP));
- #endif
- EOText;
- };
- flag = {
- name = filter;
- value = f;
- arg-type = string;
- max = 1;
- descrip = "BPF filter to limit which flows are replayed";
- doc = "";
- };
- flag = {
- name = clientnet;
- value = c;
- arg-type = string;
- descrip = "Client network(s)";
- flag-code = <<- EOText
-
- char *cidr = safe_strdup(OPT_ARG(CLIENTNET));
- if (!parse_cidr(&options.clients, cidr, ","))
- errx(1, "Unable to parse CIDR: %s", OPT_ARG(CLIENTNET));
- free(cidr);
- EOText;
- };
- flag = {
- name = servernet;
- value = s;
- arg-type = string;
- descrip = "Server network(s)";
- flag-code = <<- EOText
- char *cidr = safe_strdup(OPT_ARG(SERVERNET));
- if (!parse_cidr(&options.servers, cidr, ","))
- errx(1, "Unable to parse CIDR: %s", OPT_ARG(SERVERNET));
- free(cidr);
- EOText;
- };
- flag = {
- name = nosyn;
- value = n;
- descrip = "Disable Syn packet requirement to start connections";
- flag-code = <<- EOText
- options.nosyn = 1;
- EOText;
- };
- flag = {
- name = slimit;
- value = l;
- descrip = "Service limit to proto/port";
- arg-type = string;
- flag-code = <<- EOText
- char *p_parse = NULL, *myarg;
- myarg = safe_strdup(OPT_ARG(SLIMIT));
- p_parse = strtok(myarg, "/");
- if (strcasecmp(p_parse, "TCP") == 0) {
- options.proto = IPPROTO_TCP;
- } else if (strcasecmp(p_parse, "UDP") == 0) {
- options.proto = IPPROTO_UDP;
- } else {
- errx(1, "Unsupported protocol: %s", p_parse);
- }
- /* if port is specified, set it */
- if ((p_parse = strtok(NULL, "/")))
- options.port = htons(atoi(p_parse));
-
- EOText;
- };
- flag = {
- name = version;
- value = V;
- descrip = "Print version information";
- flag-code = <<- EOVersion
-
- fprintf(stderr, "flowreplay version: %s (build %s)", VERSION, svn_version());
- #ifdef DEBUG
- fprintf(stderr, " (debug)");
- #endif
- fprintf(stderr, "\n");
- fprintf(stderr, "Copyright 2001-2007 by Aaron Turner <aturner at synfin dot net>\n");
- #ifdef HAVE_LIBNET
- fprintf(stderr, "Compiled against libnet: %s\n", LIBNET_VERSION);
- #else
- fprintf(stderr, "Not compiled with libnet.\n");
- #endif
- #ifdef HAVE_WINPCAP
- fprintf(stderr, "Compiled against winpcap: %s\n", get_pcap_version());
- #else
- fprintf(stderr, "Compiled against libpcap: %s\n", get_pcap_version());
- #endif
- #ifdef ENABLE_64BITS
- fprintf(stderr, "64 bit packet counters: enabled\n");
- #else
- fprintf(stderr, "64 bit packet counters: disabled\n");
- #endif
- #ifdef ENABLE_VERBOSE
- fprintf(stderr, "Verbose printing via tcpdump: enabled\n");
- #else
- fprintf(stderr, "Verbose printing via tcpdump: disabled\n");
- #endif
- exit(0);
-
- EOVersion;
- doc = "";
- };
- flag = {
- name = less-help;
- value = "h";
- immediate;
- descrip = "Display less usage information and exit";
- flag-code = <<- EOHelp
-
- USAGE(EXIT_FAILURE);
- EOHelp;
- doc = "";
- };
|