summaryrefslogtreecommitdiff
path: root/tcpdump.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2014-05-02 11:49:30 -0700
committerGuy Harris <guy@alum.mit.edu>2014-05-02 11:49:30 -0700
commit0e138fbb3bb378a12324d5e66f0a2da2b1dbbe5d (patch)
tree3d8f9607cb482964065e3da205ac5967b7a1c60c /tcpdump.c
parentd6c4d01f8d8b51694435043abe6d34b4364e34d8 (diff)
downloadtcpdump-0e138fbb3bb378a12324d5e66f0a2da2b1dbbe5d.tar.gz
Add some long options.
Currently, they're all aliases for existing short options, but we're out of letters, so we'll be adding some that won't have short options. This means we can't have entries in the options table corresponding to short options with no long options, as an entry in the long options table with a null option name terminates the table.
Diffstat (limited to 'tcpdump.c')
-rw-r--r--tcpdump.c132
1 files changed, 63 insertions, 69 deletions
diff --git a/tcpdump.c b/tcpdump.c
index 85ceafb2..f1ed46e0 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -552,6 +552,27 @@ show_devices_and_exit (void)
#endif /* HAVE_PCAP_FINDALLDEVS */
/*
+ * Short options.
+ *
+ * Note that there we use all letters for short options except for g, k,
+ * o, and P, and those are used by other versions of tcpdump, and we should
+ * only use them for the same purposes that the other versions of tcpdump
+ * use them:
+ *
+ * OS X tcpdump uses -g to force non--v output for IP to be on one
+ * line, making it more "g"repable;
+ *
+ * OS X tcpdump uses -k tospecify that packet comments in pcap-ng files
+ * should be printed;
+ *
+ * OpenBSD tcpdump uses -o to indicate that OS fingerprinting should be done
+ * for hosts sending TCP SYN packets;
+ *
+ * OS X tcpdump uses -P to indicate that -w should write pcap-ng rather
+ * than pcap files.
+ */
+
+/*
* Set up flags that might or might not be supported depending on the
* version of libpcap we're using.
*/
@@ -603,85 +624,58 @@ show_devices_and_exit (void)
#define Q_FLAG
#endif
+/*
+ * Long options.
+ *
+ * We do not currently have long options corresponding to all short
+ * options; we should probably pick appropriate option names for them.
+ *
+ * However, the short options where the number of times the option is
+ * specified matters, such as -v and -d and -t, should probably not
+ * just map to a long option, as saying
+ *
+ * tcpdump --verbose --verbose
+ *
+ * doesn't make sense; it should be --verbosity={N} or something such
+ * as that.
+ *
+ * We do not currently have long options with no corresponding short
+ * options; for those, we should define values outside the range of
+ * ASCII graphic characters, make that the last component of the
+ * entry for the long option, and have a case for that option in the
+ * switch statement.
+ */
static struct option longopts[] = {
- { NULL, no_argument, NULL, 'a' },
- { NULL, no_argument, NULL, 'A' },
- { NULL, no_argument, NULL, 'b' },
#if defined(HAVE_PCAP_CREATE) || defined(WIN32)
- { NULL, required_argument, NULL, 'B' },
-#endif
- { NULL, required_argument, NULL, 'c' },
- { NULL, required_argument, NULL, 'C' },
- { NULL, no_argument, NULL, 'd' },
- { NULL, no_argument, NULL, 'D' },
- { NULL, no_argument, NULL, 'e' },
- { NULL, required_argument, NULL, 'E' },
- { NULL, no_argument, NULL, 'f' },
- { NULL, required_argument, NULL, 'F' },
- /*
- * NOTE: OS X tcpdump uses -g; we shouldn't use it except for
- * the same purpose (forcing non--v output for IP to be on one
- * line, making it more "g"repable).
- */
- { NULL, required_argument, NULL, 'G' },
- { NULL, no_argument, NULL, 'h' },
- { NULL, no_argument, NULL, 'H' },
- { NULL, required_argument, NULL, 'i' },
+ { "buffer-size", required_argument, NULL, 'B' },
+#endif
+ { "list-interfaces", no_argument, NULL, 'D' },
+ { "help", no_argument, NULL, 'h' },
+ { "interface", required_argument, NULL, 'i' },
#ifdef HAVE_PCAP_CREATE
- { NULL, no_argument, NULL, 'I' },
+ { "monitor-mode", no_argument, NULL, 'I' },
#endif
#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
- { NULL, required_argument, NULL, 'j' },
- { NULL, no_argument, NULL, 'J' },
+ { "time-stamp-type", required_argument, NULL, 'j' },
+ { "list-time-stamp-types", no_argument, NULL, 'J' },
#endif
- /*
- * NOTE: OS X tcpdump uses -k; we shouldn't use it except for
- * the same purpose (printing packet comments in pcap-ng files).
- */
- { NULL, no_argument, NULL, 'K' },
- { NULL, no_argument, NULL, 'l' },
- { NULL, no_argument, NULL, 'L' },
- { NULL, required_argument, NULL, 'm' },
- { NULL, required_argument, NULL, 'M' },
- { NULL, no_argument, NULL, 'n' },
- { NULL, no_argument, NULL, 'N' },
- /*
- * NOTE: OpenBSD tcpdump uses -o; we shouldn't use it except for
- * the same purpose (trying to do OS fingerprinting for
- * hosts sending TCP SYN packets).
- */
- { NULL, no_argument, NULL, 'O' },
- { NULL, no_argument, NULL, 'p' },
- /*
- * NOTE: OS X tcpdump uses -P; we shouldn't use it except for
- * the same purpose (writing pcap-ng rather than pcap files).
- */
- { NULL, no_argument, NULL, 'q' },
+ { "dont-verify-checksums", no_argument, NULL, 'K' },
+ { "list-data-link-types", no_argument, NULL, 'L' },
+ { "no-optimize", no_argument, NULL, 'O' },
+ { "no-promiscuous-mode", no_argument, NULL, 'p' },
#ifdef HAVE_PCAP_SETDIRECTION
- { NULL, required_argument, NULL, 'Q' },
-#endif
- { NULL, required_argument, NULL, 'r' },
- { NULL, no_argument, NULL, 'R' },
- { NULL, required_argument, NULL, 's' },
- { NULL, no_argument, NULL, 'S' },
- { NULL, no_argument, NULL, 't' },
- { NULL, required_argument, NULL, 'T' },
- { NULL, no_argument, NULL, 'u' },
+ { "direction", required_argument, NULL, 'Q' },
+#endif
+ { "snapshot-length", required_argument, NULL, 's' },
+ { "absolute-tcp-sequence-numbers", no_argument, NULL, 'S' },
#ifdef HAVE_PCAP_DUMP_FLUSH
- { NULL, no_argument, NULL, 'U' },
-#endif
- { NULL, no_argument, NULL, 'v' },
- { NULL, required_argument, NULL, 'V' },
- { NULL, required_argument, NULL, 'w' },
- { NULL, required_argument, NULL, 'W' },
- { NULL, no_argument, NULL, 'x' },
- { NULL, no_argument, NULL, 'X' },
- { NULL, required_argument, NULL, 'y' },
+ { "packet-buffered", no_argument, NULL, 'U' },
+#endif
+ { "linktype", required_argument, NULL, 'y' },
#if defined(HAVE_PCAP_DEBUG) || defined(HAVE_YYDEBUG)
- { NULL, no_argument, NULL, 'Y' },
+ { "debug-filter-parser", no_argument, NULL, 'Y' },
#endif
- { NULL, required_argument, NULL, 'z' },
- { NULL, required_argument, NULL, 'Z' },
+ { "relinquish-privileges", required_argument, NULL, 'Z' },
{ NULL, 0, NULL, 0 }
};