📄 netdissect.h
字号:
/* * Copyright (c) 1988-1997 * The Regents of the University of California. All rights reserved. * * Copyright (c) 1998-2004 Michael Richardson <mcr@tcpdump.org> * The TCPDUMP project * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that: (1) source code distributions * retain the above copyright notice and this paragraph in its entirety, (2) * distributions including binary code include the above copyright notice and * this paragraph in its entirety in the documentation or other materials * provided with the distribution, and (3) all advertising materials mentioning * features or use of this software display the following acknowledgement: * ``This product includes software developed by the University of California, * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of * the University nor the names of its contributors may be used to endorse * or promote products derived from this software without specific prior * written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * @(#) $Header: /tcpdump/master/tcpdump/netdissect.h,v 1.23.2.2 2008-04-04 19:42:52 guy Exp $ (LBL) */#ifndef netdissect_h#define netdissect_h#ifdef HAVE_OS_PROTO_H#include "os-proto.h"#endif#include <sys/types.h>#ifndef HAVE___ATTRIBUTE__#define __attribute__(x)#endif/* snprintf et al */#include <stdarg.h>#if !defined(HAVE_SNPRINTF)int snprintf (char *str, size_t sz, const char *format, ...) __attribute__ ((format (printf, 3, 4)));#endif#if !defined(HAVE_VSNPRINTF)int vsnprintf (char *str, size_t sz, const char *format, va_list ap) __attribute__((format (printf, 3, 0)));#endif#ifndef HAVE_STRLCATextern size_t strlcat (char *, const char *, size_t);#endif#ifndef HAVE_STRLCPYextern size_t strlcpy (char *, const char *, size_t);#endif#ifndef HAVE_STRDUPextern char *strdup (const char *str);#endif#ifndef HAVE_STRSEPextern char *strsep(char **, const char *);#endifstruct tok { int v; /* value */ const char *s; /* string */};#define TOKBUFSIZE 128extern const char *tok2strbuf(const struct tok *, const char *, int, char *buf, size_t bufsize);/* tok2str is deprecated */extern const char *tok2str(const struct tok *, const char *, int);extern char *bittok2str(const struct tok *, const char *, int);extern char *bittok2str_nosep(const struct tok *, const char *, int);typedef struct netdissect_options netdissect_options;struct netdissect_options { int ndo_aflag; /* translate network and broadcast addresses */ int ndo_eflag; /* print ethernet header */ int ndo_fflag; /* don't translate "foreign" IP address */ int ndo_Kflag; /* don't check TCP checksums */ int ndo_nflag; /* leave addresses as numbers */ int ndo_Nflag; /* remove domains from printed host names */ int ndo_qflag; /* quick (shorter) output */ int ndo_Rflag; /* print sequence # field in AH/ESP*/ int ndo_sflag; /* use the libsmi to translate OIDs */ int ndo_Sflag; /* print raw TCP sequence numbers */ int ndo_tflag; /* print packet arrival time */ int ndo_Uflag; /* "unbuffered" output of dump files */ int ndo_uflag; /* Print undecoded NFS handles */ int ndo_vflag; /* verbose */ int ndo_xflag; /* print packet in hex */ int ndo_Xflag; /* print packet in hex/ascii */ int ndo_Aflag; /* print packet only in ascii observing TAB, * LF, CR and SPACE as graphical chars */ int ndo_Bflag; /* buffer size */ int ndo_Iflag; /* rfmon (monitor) mode */ int ndo_Oflag; /* run filter code optimizer */ int ndo_dlt; /* if != -1, ask libpcap for the DLT it names*/ int ndo_pflag; /* don't go promiscuous */ int ndo_Cflag; /* rotate dump files after this many bytes */ int ndo_Cflag_count; /* Keep track of which file number we're writing */ int ndo_Gflag; /* rotate dump files after this many seconds */ int ndo_Gflag_count; /* number of files created with Gflag rotation */ time_t ndo_Gflag_time; /* The last time_t the dump file was rotated. */ int ndo_Wflag; /* recycle output files after this number of files */ int ndo_WflagChars; int ndo_suppress_default_print; /* don't use default_print() for unknown packet types */ const char *ndo_dltname; char *ndo_espsecret; struct sa_list *ndo_sa_list_head; /* used by print-esp.c */ struct sa_list *ndo_sa_default; char *ndo_tcpmd5secret; /* TCP-MD5 secret key */ struct esp_algorithm *ndo_espsecret_xform; /* cache of decoded */ char *ndo_espsecret_key; int ndo_packettype; /* as specified by -T */ char *ndo_program_name; /*used to generate self-identifying messages */ int32_t ndo_thiszone; /* seconds offset from gmt to local time */ int ndo_snaplen; /*global pointers to beginning and end of current packet (during printing) */ const u_char *ndo_packetp; const u_char *ndo_snapend; /* bookkeeping for ^T output */ int ndo_infodelay; /* pointer to void function to output stuff */ void (*ndo_default_print)(netdissect_options *, register const u_char *bp, register u_int length); void (*ndo_info)(netdissect_options *, int verbose); int (*ndo_printf)(netdissect_options *, const char *fmt, ...); void (*ndo_error)(netdissect_options *, const char *fmt, ...); void (*ndo_warning)(netdissect_options *, const char *fmt, ...);};#define PT_VAT 1 /* Visual Audio Tool */#define PT_WB 2 /* distributed White Board */#define PT_RPC 3 /* Remote Procedure Call */#define PT_RTP 4 /* Real-Time Applications protocol */#define PT_RTCP 5 /* Real-Time Applications control protocol */#define PT_SNMP 6 /* Simple Network Management Protocol */#define PT_CNFP 7 /* Cisco NetFlow protocol */#ifndef min#define min(a,b) ((a)>(b)?(b):(a))#endif#ifndef max#define max(a,b) ((b)>(a)?(b):(a))#endif#ifndef INET6/* * The default snapshot length. This value allows most printers to print * useful information while keeping the amount of unwanted data down. * In particular, it allows for an ethernet header, tcp/ip header, and * 14 bytes of data (assuming no ip options). */#define DEFAULT_SNAPLEN 68#else#define DEFAULT_SNAPLEN 96#endif#ifndef BIG_ENDIAN#define BIG_ENDIAN 4321#define LITTLE_ENDIAN 1234#endif#define ESRC(ep) ((ep)->ether_shost)#define EDST(ep) ((ep)->ether_dhost)#ifndef NTOHL#define NTOHL(x) (x) = ntohl(x)#define NTOHS(x) (x) = ntohs(x)#define HTONL(x) (x) = htonl(x)#define HTONS(x) (x) = htons(x)#endif/* * True if "l" bytes of "var" were captured. * * The "ndo->ndo_snapend - (l) <= ndo->ndo_snapend" checks to make sure * "l" isn't so large that "ndo->ndo_snapend - (l)" underflows. * * The check is for <= rather than < because "l" might be 0. */#define ND_TTEST2(var, l) (ndo->ndo_snapend - (l) <= ndo->ndo_snapend && \ (const u_char *)&(var) <= ndo->ndo_snapend - (l))/* True if "var" was captured */#define ND_TTEST(var) ND_TTEST2(var, sizeof(var))/* Bail if "l" bytes of "var" were not captured */#define ND_TCHECK2(var, l) if (!ND_TTEST2(var, l)) goto trunc/* Bail if "var" was not captured */#define ND_TCHECK(var) ND_TCHECK2(var, sizeof(var))#define ND_PRINT(STUFF) (*ndo->ndo_printf)STUFF#define ND_DEFAULTPRINT(ap, length) (*ndo->ndo_default_print)(ndo, ap, length)#if 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -