[prev in list] [next in list] [prev in thread] [next in thread]
List: tcpdump-patches
Subject: print-ascii.c
From: "Jens-S. Voeckler" <voeckler () rvs ! uni-hannover ! de>
Date: 2000-09-22 9:37:00
[Download RAW message or body]
Hi,
I do prefer to read single hex bytes instead of glued shorts.
I appended the patch I did to my tcpdump.
--
Also, I would like to vote for a longer snaplen for the
following reason:
20 (ip) + 20 (tcp) + 4 (mss) +
4 (winscale+nop) + 12 (timestamp+2*nop) + x (sackok)
> 60 byte, and with ether > 78 Byte
Some TCP implementations assemble the TCP options in a
very unfortunate way, thus wasting space on NOPs unecessarily.
A generic default of 96 bytes seems applicable.
--
Le deagh dhùrachd,
Dipl.-Ing. Jens-S. Vöckler (voeckler@rvs.uni-hannover.de)
Institute for Computer Networks and Distributed Systems
University of Hanover, Germany; +49 511 762 4726
["hex.diff" (text/plain)]
*** print-ascii.c Fri Sep 22 10:51:25 2000
--- print-ascii.org.c Fri Sep 22 10:19:42 2000
***************
*** 51,90 ****
#include "interface.h"
#define HEXDUMP_BYTES_PER_LINE 16
! #define HEXDUMP_HEXSTUFF_PER_BYTE 3 /* 2 hex digits and a space */
void
ascii_print_with_offset(register const u_char *cp, register u_int length,
register u_int oset)
{
! static const char* hexdigit = "0123456789ABCDEF";
! char hexstuff[HEXDUMP_BYTES_PER_LINE*HEXDUMP_HEXSTUFF_PER_BYTE+2], *hsp;
! char asciistuff[HEXDUMP_BYTES_PER_LINE+2], *asp;
! register u_int i, j;
! for ( i=oset; i<length; i+=16 ) {
! hsp = hexstuff;
! asp = asciistuff;
! for ( j=0; j<16 && j+i<length; ++j ) {
! register u_char ch = cp[i+j];
! *(hsp++) = hexdigit[ ch >> 4 ];
! *(hsp++) = hexdigit[ ch & 15 ];
! *(hsp++) = ((j==7) ? '-' : ' ');
! /* hack: assume ISO-8859-X, so we see German umlaut etc. */
! *(asp++) = (isgraph( ch & 127 ) ? (char) ch : '.');
! }
!
! /* fill hex digits line, if not a complete line */
! for ( ; j<16; ++j ) {
! *(hsp++) = ' ';
! *(hsp++) = ' ';
! *(hsp++) = ' ';
! }
!
! /* terminate strings */
! *hsp = *asp = '\0';
! (void) printf( "\n0x%04X: %s %s", i, hexstuff, asciistuff );
! }
}
void
--- 51,103 ----
#include "interface.h"
#define HEXDUMP_BYTES_PER_LINE 16
! #define HEXDUMP_SHORTS_PER_LINE (HEXDUMP_BYTES_PER_LINE / 2)
! #define HEXDUMP_HEXSTUFF_PER_SHORT 5 /* 4 hex digits and a space */
! #define HEXDUMP_HEXSTUFF_PER_LINE \
! (HEXDUMP_HEXSTUFF_PER_SHORT * HEXDUMP_SHORTS_PER_LINE)
void
ascii_print_with_offset(register const u_char *cp, register u_int length,
register u_int oset)
{
! register u_int i;
! register int s1, s2;
! register int nshorts;
! char hexstuff[HEXDUMP_SHORTS_PER_LINE*HEXDUMP_HEXSTUFF_PER_SHORT+1], *hsp;
! char asciistuff[HEXDUMP_BYTES_PER_LINE+1], *asp;
! nshorts = length / sizeof(u_short);
! i = 0;
! hsp = hexstuff; asp = asciistuff;
! while (--nshorts >= 0) {
! s1 = *cp++;
! s2 = *cp++;
! (void)sprintf(hsp, " %02x%02x", s1, s2);
! hsp += HEXDUMP_HEXSTUFF_PER_SHORT;
! *(asp++) = (isgraph(s1) ? s1 : '.');
! *(asp++) = (isgraph(s2) ? s2 : '.');
! if (++i >= HEXDUMP_SHORTS_PER_LINE) {
! *hsp = *asp = '\0';
! (void)printf("\n0x%04x\t%-*s\t%s",
! oset, HEXDUMP_HEXSTUFF_PER_LINE,
! hexstuff, asciistuff);
! i = 0; hsp = hexstuff; asp = asciistuff;
! oset += HEXDUMP_BYTES_PER_LINE;
! }
! }
! if (length & 1) {
! s1 = *cp++;
! (void)sprintf(hsp, " %02x", s1);
! hsp += 3;
! *(asp++) = (isgraph(s1) ? s1 : '.');
! ++i;
! }
! if (i > 0) {
! *hsp = *asp = '\0';
! (void)printf("\n0x%04x\t%-*s\t%s",
! oset, HEXDUMP_HEXSTUFF_PER_LINE,
! hexstuff, asciistuff);
! }
}
void
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic