tcpdump mailing list archives

Bug Fix in tcpdump 3.8.3


From: Sebastien Vincent <svincent () idems fr>
Date: Fri, 03 Sep 2004 14:48:31 +0400

Hello.

I found a bug in current tcpdump (3.8.3).
This bug concern the use of the flags -x/xx and -X/XX.

Wheither you use x's or X's flags the output is the same. It
print raw data in hex and ascii.

The man says :
-x's : hex print
'X's : hex + ascii print

So I made changes into ./tcpdump.c and it now works fine.

My system is gentoo 2004.2 under i386.

Here is the diff :
shinmei@seb_linux shinmei $ diff -u tcpdump.c.old tcpdump.c
--- tcpdump.c.old       2004-09-03 14:37:24.944016224 +0400
+++ tcpdump.c   2004-09-03 14:36:34.957615312 +0400
@@ -585,7 +585,6 @@
                       break;

               case 'X':
-                       ++xflag;
                       ++Xflag;
                       break;

@@ -1020,7 +1019,7 @@
                       /*
                        * Include the link-layer header.
                        */
-                       default_print(sp, h->caplen);
+                       hex_print("\n\t", sp, h->caplen);
               } else {
                       /*
                        * Don't include the link-layer header - and if
@@ -1028,9 +1027,28 @@
                        * print nothing.
                        */
                       if (h->caplen > hdrlen)
-                               default_print(sp + hdrlen,
+                               hex_print("\n\t", sp + hdrlen,
                                   h->caplen - hdrlen);
               }
+       } else if (Xflag) {
+                /*
+                 * Print the raw packet data.
+                 */
+                if (Xflag > 1) {
+                        /*
+                         * Include the link-layer header.
+                         */
+                        ascii_print("\n\t", sp, h->caplen);
+                } else {
+                        /*
+                         * Don't include the link-layer header - and if
+                         * we have nothing past the link-layer header,
+                         * print nothing.
+                         */
+                        if (h->caplen > hdrlen)
+                                ascii_print("\n\t", sp + hdrlen,
+                                    h->caplen - hdrlen);
+                }
       }

       putchar('\n');
shinmei@seb_linux shinmei $

Hope I can help :)

Sebastien Vincent
-
This is the tcpdump-workers list.
Visit https://lists.sandelman.ca/ to unsubscribe.


Current thread: