Date: Thu, 16 Sep 1999 23:07:12 +0100 (BST) From: fanf@demon.net To: FreeBSD-gnats-submit@freebsd.org Subject: bin/13781: [PATCH] allow tcpdump to print packet contents in ascii Message-ID: <199909162207.XAA16067@fanf.eng.demon.net>
index | next in thread | raw e-mail
>Number: 13781
>Category: bin
>Synopsis: [PATCH] allow tcpdump to print packet contents in ascii
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Thu Sep 16 15:10:00 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator: Tony Finch
>Release: FreeBSD 3.3-RC-19990916 i386
>Organization:
Demon Internet
>Environment:
FreeBSD fanf.eng.demon.net 3.3-RC-19990916 FreeBSD 3.3-RC-19990916 #3: Thu Sep 16 03:06:33 BST 1999 root@fanf.eng.demon.net:/usr/src/sys/compile/DELL-PREC410 i386
>Description:
This patch adds a -z flag to tcpdump like the existing -x flag, but this one
prints the packet contents in ascii as well as hex
>How-To-Repeat:
>Fix:
diff -ur tcpdump/VERSION tcpdump-fanf/VERSION
--- tcpdump/VERSION Tue Sep 15 20:36:18 1998
+++ tcpdump-fanf/VERSION Thu Sep 16 22:34:02 1999
@@ -1 +1 @@
-3.4
+3.4f2
diff -ur tcpdump/interface.h tcpdump-fanf/interface.h
--- tcpdump/interface.h Thu May 27 04:06:52 1999
+++ tcpdump-fanf/interface.h Thu Sep 16 22:34:02 1999
@@ -45,6 +45,7 @@
extern int tflag; /* print packet arrival time */
extern int vflag; /* verbose */
extern int xflag; /* print packet in hex */
+extern int zflag; /* print packet in ascii */
extern int packettype; /* as specified by -T */
#define PT_VAT 1 /* Visual Audio Tool */
diff -ur tcpdump/print-atm.c tcpdump-fanf/print-atm.c
--- tcpdump/print-atm.c Tue Sep 15 20:46:59 1998
+++ tcpdump-fanf/print-atm.c Thu Sep 16 22:36:51 1999
@@ -151,12 +151,14 @@
p[0], p[1], p[2], /* dsap/ssap/ctrl */
p[3], p[4], p[5], /* manufacturer's code */
ethertype);
- if (!xflag && !qflag)
+ if (!xflag && !qflag && !zflag)
/* default_print(p, caplen); */
llc_print(p-8,length+8,caplen+8,"000000","000000");
}
if (xflag)
default_print(p, caplen);
+ if (zflag)
+ ascii_print(p, caplen);
out:
putchar('\n');
}
diff -ur tcpdump/print-ether.c tcpdump-fanf/print-ether.c
--- tcpdump/print-ether.c Tue Sep 15 20:46:59 1998
+++ tcpdump-fanf/print-ether.c Thu Sep 16 22:34:02 1999
@@ -126,18 +126,20 @@
printf("(LLC %s) ",
etherproto_string(htons(extracted_ethertype)));
}
- if (!xflag && !qflag)
+ if (!xflag && !qflag && !zflag)
default_print(p, caplen);
}
} else if (ether_encap_print(ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
ether_print((u_char *)ep, length + sizeof(*ep));
- if (!xflag && !qflag)
+ if (!xflag && !qflag && !zflag)
default_print(p, caplen);
}
if (xflag)
default_print(p, caplen);
+ if (zflag)
+ ascii_print(p, caplen);
out:
putchar('\n');
}
diff -ur tcpdump/print-fddi.c tcpdump-fanf/print-fddi.c
--- tcpdump/print-fddi.c Tue Sep 15 20:46:59 1998
+++ tcpdump-fanf/print-fddi.c Thu Sep 16 22:34:02 1999
@@ -318,7 +318,7 @@
printf("(LLC %s) ",
etherproto_string(htons(extracted_ethertype)));
}
- if (!xflag && !qflag)
+ if (!xflag && !qflag && !zflag)
default_print(p, caplen);
}
} else if ((fddip->fddi_fc & FDDIFC_CLFF) == FDDIFC_SMT)
@@ -327,11 +327,13 @@
/* Some kinds of FDDI packet we cannot handle intelligently */
if (!eflag)
fddi_print(fddip, length, ESRC(&ehdr), EDST(&ehdr));
- if (!xflag && !qflag)
+ if (!xflag && !qflag && !zflag)
default_print(p, caplen);
}
if (xflag)
default_print(p, caplen);
+ if (zflag)
+ ascii_print(p, caplen);
out:
putchar('\n');
}
diff -ur tcpdump/print-fr.c tcpdump-fanf/print-fr.c
--- tcpdump/print-fr.c Thu Jan 1 04:13:43 1998
+++ tcpdump-fanf/print-fr.c Thu Sep 16 22:38:16 1999
@@ -240,13 +240,16 @@
default:
if(!eflag)
fr_hdlc_print(p, length);
- if(!xflag)
+ if(!xflag && !zflag)
default_print((const u_char *)(p + LAYER2_LEN(p)),
caplen - LAYER2_LEN(p));
}
if (xflag)
default_print((const u_char *)(p + LAYER2_LEN(p)),
+ caplen - LAYER2_LEN(p));
+ if (zflag)
+ ascii_print((const u_char *)(p + LAYER2_LEN(p)),
caplen - LAYER2_LEN(p));
out:
putchar('\n');
diff -ur tcpdump/print-null.c tcpdump-fanf/print-null.c
--- tcpdump/print-null.c Tue Sep 15 20:46:59 1998
+++ tcpdump-fanf/print-null.c Thu Sep 16 22:34:02 1999
@@ -118,6 +118,8 @@
if (xflag)
default_print((const u_char *)ip, caplen - NULL_HDRLEN);
+ if (zflag)
+ ascii_print((const u_char *)ip, caplen - NULL_HDRLEN);
putchar('\n');
}
diff -ur tcpdump/print-ppp.c tcpdump-fanf/print-ppp.c
--- tcpdump/print-ppp.c Tue Sep 15 20:46:59 1998
+++ tcpdump-fanf/print-ppp.c Thu Sep 16 22:37:06 1999
@@ -521,7 +521,7 @@
default:
if(!eflag)
ppp_hdlc_print(p, length);
- if(!xflag)
+ if(!xflag && !zflag)
default_print((const u_char *)(p + PPP_HDRLEN),
caplen - PPP_HDRLEN);
}
@@ -529,6 +529,9 @@
if (xflag)
default_print((const u_char *)(p + PPP_HDRLEN),
caplen - PPP_HDRLEN);
+ if (zflag)
+ ascii_print((const u_char *)(p + PPP_HDRLEN),
+ caplen - PPP_HDRLEN);
out:
putchar('\n');
}
@@ -606,6 +609,8 @@
if (xflag)
default_print((const u_char *)p, caplen - hdrlength);
+ if (zflag)
+ ascii_print((const u_char *)p, caplen - hdrlength);
out:
putchar('\n');
}
diff -ur tcpdump/print-raw.c tcpdump-fanf/print-raw.c
--- tcpdump/print-raw.c Tue Sep 15 20:36:30 1998
+++ tcpdump-fanf/print-raw.c Thu Sep 16 22:34:02 1999
@@ -84,5 +84,7 @@
if (xflag)
default_print(p, caplen);
+ if (zflag)
+ ascii_print(p, caplen);
putchar('\n');
}
diff -ur tcpdump/print-sl.c tcpdump-fanf/print-sl.c
--- tcpdump/print-sl.c Tue Sep 15 20:46:59 1998
+++ tcpdump-fanf/print-sl.c Thu Sep 16 22:34:03 1999
@@ -108,6 +108,8 @@
if (xflag)
default_print((u_char *)ip, caplen - SLIP_HDRLEN);
+ if (zflag)
+ ascii_print((u_char *)ip, caplen - SLIP_HDRLEN);
out:
putchar('\n');
}
@@ -147,6 +149,8 @@
if (xflag)
default_print((u_char *)ip, caplen - SLIP_HDRLEN);
+ if (zflag)
+ ascii_print((u_char *)ip, caplen - SLIP_HDRLEN);
out:
putchar('\n');
}
diff -ur tcpdump/print-token.c tcpdump-fanf/print-token.c
--- tcpdump/print-token.c Thu May 27 04:06:53 1999
+++ tcpdump-fanf/print-token.c Thu Sep 16 22:38:48 1999
@@ -155,11 +155,13 @@
printf("(LLC %s) ",
etherproto_string(htons(extracted_ethertype)));
}
- if (!xflag && !qflag)
+ if (!xflag && !qflag && !zflag)
default_print(p, caplen);
}
if (xflag)
default_print(p, caplen);
+ if (zflag)
+ ascii_print(p, caplen);
out:
putchar('\n');
}
diff -ur tcpdump/tcpdump.1 tcpdump-fanf/tcpdump.1
--- tcpdump/tcpdump.1 Tue Dec 29 02:53:08 1998
+++ tcpdump-fanf/tcpdump.1 Thu Sep 16 22:34:03 1999
@@ -215,6 +215,12 @@
The smaller of the entire packet or
.I snaplen
bytes will be printed.
+.TP
+.B \-z
+Print each packet (minus its link level header) in ascii.
+The smaller of the entire packet or
+.I snaplen
+bytes will be printed.
.IP "\fI expression\fP"
.RS
selects which packets will be dumped. If no \fIexpression\fP
diff -ur tcpdump/tcpdump.c tcpdump-fanf/tcpdump.c
--- tcpdump/tcpdump.c Thu May 27 04:06:55 1999
+++ tcpdump-fanf/tcpdump.c Thu Sep 16 22:34:03 1999
@@ -46,6 +46,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <ctype.h>
#include "interface.h"
#include "addrtoname.h"
@@ -66,6 +67,7 @@
int tflag = 1; /* print packet arrival time */
int vflag; /* verbose */
int xflag; /* print packet in hex */
+int zflag; /* print packet in ascii */
int packettype;
@@ -149,7 +151,7 @@
opterr = 0;
while (
- (op = getopt(argc, argv, "ac:defF:i:lnNOpqr:s:StT:vw:xY")) != EOF)
+ (op = getopt(argc, argv, "ac:defF:i:lnNOpqr:s:StT:vw:xYz")) != EOF)
switch (op) {
case 'a':
@@ -263,6 +265,10 @@
++xflag;
break;
+ case 'z':
+ ++zflag;
+ break;
+
default:
usage();
/* NOTREACHED */
@@ -408,6 +414,12 @@
*
* (BTW, please don't send us patches to print the packet out in ascii)
*/
+/*
+ * The developers of tcpdump are fascist bastards.
+ * (And fuckwits, too. (void)printf("foo")? Bunch of arse.
+ * They should be writing if (printf("foo") < 0)
+ * { perror("stdout"); exit(EXIT_FAILURE); }
+ */
void
default_print(register const u_char *bp, register u_int length)
{
@@ -432,6 +444,35 @@
(void)printf("\n\t\t\t");
(void)printf(" %02x", *(u_char *)sp);
}
+}
+
+/*
+ * print the packet out in ascii
+ */
+void
+ascii_print(register const u_char *bp, register int length)
+{
+ register u_int i, j;
+
+ for (i = 0; i < length; i += 16, bp += 16) {
+ fputs("\n ", stdout);
+ for (j = 0; j < 16; j++) {
+ if (i + j < length)
+ printf(" %02X", bp[j]);
+ else
+ printf(" ");
+ if (j % 4 == 3)
+ fputs(" ", stdout);
+ }
+ fputs(" ", stdout);
+ for (j = 0; j < 16; j++) {
+ if (i + j < length)
+ putchar(isprint(bp[j]) ? bp[j] : '.');
+ if (j % 4 == 3)
+ putchar(' ');
+ }
+ }
+ putchar('\n');
}
__dead void
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199909162207.XAA16067>
