* Creates random packet traces. Useful for debugging sniffers by testing
* assumptions about the veracity of the data found in the packet.
*
- * $Id: randpkt.c,v 1.9 2000/09/21 04:41:09 gram Exp $
+ * $Id: randpkt.c,v 1.18 2002/11/17 21:47:41 gerald Exp $
+ *
+ * Copyright (C) 1999 by Gilbert Ramirez <gram@alumni.rice.edu>
*
- * Copyright (C) 1999 by Gilbert Ramirez <gram@xiexie.org>
- *
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "config.h"
#endif
+#ifdef NEED_GETOPT_H
+#include "getopt.h"
+#endif
+
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
PKT_SYSLOG,
PKT_TCP,
PKT_TR,
- PKT_UDP
+ PKT_UDP,
+ PKT_BVLC,
+ PKT_NCP2222,
+ PKT_GIOP,
+ PKT_BGP,
+ PKT_TDS,
};
typedef struct {
0xc4, 0x67
};
-/* Ethernet+IP+UP, indicating NBNS */
+/* Ethernet+IP+UDP, indicating NBNS */
guint8 pkt_nbns[] = {
0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x01, 0x01,
0x0a, 0x01, 0x01, 0x63
};
+/* Ethernet+IP+UDP, indicating BVLC */
+guint8 pkt_bvlc[] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01,
+ 0x08, 0x00,
+
+ 0x45, 0x00, 0x00, 0x3c,
+ 0xc5, 0x9e, 0x40, 0x00,
+ 0xff, 0x11, 0x01, 0xaa,
+ 0xc1, 0xff, 0x19, 0x1e,
+ 0xc1, 0xff, 0x19, 0xff,
+ 0xba, 0xc0, 0xba, 0xc0,
+ 0x00, 0xff, 0x2d, 0x5e,
+ 0x81
+};
+
+/* TR+LLC+IPX, indicating NCP, with NCP Type == 0x2222 */
+guint8 pkt_ncp2222[] = {
+ 0x10, 0x40, 0x00, 0x00,
+ 0xf6, 0x7c, 0x9b, 0x70,
+ 0x68, 0x00, 0x19, 0x69,
+ 0x95, 0x8b, 0xe0, 0xe0,
+ 0x03, 0xff, 0xff, 0x00,
+ 0x25, 0x02, 0x11, 0x00,
+ 0x00, 0x74, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x04, 0x51, 0x00,
+ 0x00, 0x00, 0x04, 0x00,
+ 0x02, 0x16, 0x19, 0x7a,
+ 0x84, 0x40, 0x01, 0x22,
+ 0x22
+};
+
+/* Ethernet+IP+TCP, indicating GIOP */
+guint8 pkt_giop[] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01,
+ 0x08, 0x00,
+
+ 0x45, 0x00, 0x00, 0xa6,
+ 0x00, 0x2f, 0x40, 0x00,
+ 0x40, 0x06, 0x3c, 0x21,
+ 0x7f, 0x00, 0x00, 0x01,
+ 0x7f, 0x00, 0x00, 0x01,
+
+ 0x30, 0x39, 0x04, 0x05,
+ 0xac, 0x02, 0x1e, 0x69,
+ 0xab, 0x74, 0xab, 0x64,
+ 0x80, 0x18, 0x79, 0x60,
+ 0xc4, 0xb8, 0x00, 0x00,
+ 0x01, 0x01, 0x08, 0x0a,
+ 0x00, 0x00, 0x48, 0xf5,
+ 0x00, 0x00, 0x48, 0xf5,
+
+ 0x47, 0x49, 0x4f, 0x50,
+ 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01,
+ 0x01
+};
+
+/* Ethernet+IP+TCP, indicating BGP */
+guint8 pkt_bgp[] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01,
+ 0x08, 0x00,
+
+ 0x45, 0x00, 0x00, 0xa6,
+ 0x00, 0x2f, 0x40, 0x00,
+ 0x40, 0x06, 0x3c, 0x21,
+ 0x7f, 0x00, 0x00, 0x01,
+ 0x7f, 0x00, 0x00, 0x01,
+
+ 0x30, 0x39, 0x00, 0xb3,
+ 0xac, 0x02, 0x1e, 0x69,
+ 0xab, 0x74, 0xab, 0x64,
+ 0x80, 0x18, 0x79, 0x60,
+ 0xc4, 0xb8, 0x00, 0x00,
+ 0x01, 0x01, 0x08, 0x0a,
+ 0x00, 0x00, 0x48, 0xf5,
+ 0x00, 0x00, 0x48, 0xf5,
+
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+};
+
+/* Ethernet+IP+TCP, indicating TDS NetLib */
+guint8 pkt_tds[] = {
+ 0x00, 0x50, 0x8b, 0x0d,
+ 0x7a, 0xed, 0x00, 0x08,
+ 0xa3, 0x98, 0x39, 0x81,
+ 0x08, 0x00,
+
+ 0x45, 0x00, 0x03, 0x8d,
+ 0x90, 0xd4, 0x40, 0x00,
+ 0x7c, 0x06, 0xc3, 0x1b,
+ 0xac, 0x14, 0x02, 0x22,
+ 0x0a, 0xc2, 0xee, 0x82,
+
+ 0x05, 0x99, 0x08, 0xf8,
+ 0xff, 0x4e, 0x85, 0x46,
+ 0xa2, 0xb4, 0x42, 0xaa,
+ 0x50, 0x18, 0x3c, 0x28,
+ 0x0f, 0xda, 0x00, 0x00,
+};
+
/* This little data table drives the whole program */
pkt_example examples[] = {
{ "arp", "Address Resolution Protocol",
PKT_TR, NULL, WTAP_ENCAP_TOKEN_RING, 0 },
{ "udp", "User Datagram Protocol",
- PKT_UDP, pkt_udp, WTAP_ENCAP_ETHERNET, array_length(pkt_udp) }
+ PKT_UDP, pkt_udp, WTAP_ENCAP_ETHERNET, array_length(pkt_udp) },
+
+ { "bvlc", "BACnet Virtual Link Control",
+ PKT_BVLC, pkt_bvlc, WTAP_ENCAP_ETHERNET, array_length(pkt_bvlc) },
+
+ { "ncp2222", "NetWare Core Protocol",
+ PKT_NCP2222, pkt_ncp2222, WTAP_ENCAP_TOKEN_RING, array_length(pkt_ncp2222) },
+
+ { "giop", "General Inter-ORB Protocol",
+ PKT_GIOP, pkt_giop, WTAP_ENCAP_ETHERNET, array_length(pkt_giop) },
+
+ { "bgp", "Border Gateway Protocol",
+ PKT_BGP, pkt_bgp, WTAP_ENCAP_ETHERNET, array_length(pkt_bgp) },
+
+ { "tds", "TDS NetLib",
+ PKT_TDS, pkt_tds, WTAP_ENCAP_ETHERNET, array_length(pkt_tds) },
+
};
int produce_max_bytes = 5000;
pkt_example *example;
- while ((opt = getopt(argc, argv, "b:c:t:")) != EOF) {
+ while ((opt = getopt(argc, argv, "b:c:t:")) != -1) {
switch (opt) {
case 'b': /* max bytes */
produce_max_bytes = atoi(optarg);
}
}
- /* default type */
- return PKT_ETHERNET;
+ /* Complain */
+ printf("Type %s not known.\n", string);
+ exit(1);
}
/* Find pkt_example record and return pointer to it */
}
printf("Internal error. Type %d has no entry in examples table.\n", type);
- exit(0);
+ exit(1);
}
/* Seed the random-number generator */