Merge tcpdump 3.5
This commit is contained in:
parent
107d567bf3
commit
c780ea93f3
@ -1,505 +0,0 @@
|
|||||||
dnl @(#) $Header: acsite.m4,v 1.41 96/11/29 15:30:40 leres Exp $ (LBL)
|
|
||||||
dnl
|
|
||||||
dnl Copyright (c) 1995, 1996
|
|
||||||
dnl The Regents of the University of California. All rights reserved.
|
|
||||||
dnl
|
|
||||||
dnl Redistribution and use in source and binary forms, with or without
|
|
||||||
dnl modification, are permitted provided that: (1) source code distributions
|
|
||||||
dnl retain the above copyright notice and this paragraph in its entirety, (2)
|
|
||||||
dnl distributions including binary code include the above copyright notice and
|
|
||||||
dnl this paragraph in its entirety in the documentation or other materials
|
|
||||||
dnl provided with the distribution, and (3) all advertising materials mentioning
|
|
||||||
dnl features or use of this software display the following acknowledgement:
|
|
||||||
dnl ``This product includes software developed by the University of California,
|
|
||||||
dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
|
||||||
dnl the University nor the names of its contributors may be used to endorse
|
|
||||||
dnl or promote products derived from this software without specific prior
|
|
||||||
dnl written permission.
|
|
||||||
dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
||||||
dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
||||||
dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
dnl
|
|
||||||
dnl LBL autoconf macros
|
|
||||||
dnl
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Determine which compiler we're using (cc or gcc)
|
|
||||||
dnl If using gcc, determine the version number
|
|
||||||
dnl If using cc, require that it support ansi prototypes
|
|
||||||
dnl If using gcc, use -O2 (otherwise use -O)
|
|
||||||
dnl If using cc, explicitly specify /usr/local/include
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_C_INIT(copt, incls)
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl $1 (copt set)
|
|
||||||
dnl $2 (incls set)
|
|
||||||
dnl CC
|
|
||||||
dnl ac_cv_gcc_vers
|
|
||||||
dnl LBL_CFLAGS
|
|
||||||
dnl
|
|
||||||
dnl XXX need to add test to make sure ac_prog_cc hasn't been called
|
|
||||||
AC_DEFUN(AC_LBL_C_INIT,
|
|
||||||
[AC_PREREQ(2.12)
|
|
||||||
$1=-O
|
|
||||||
$2=""
|
|
||||||
if test "${CFLAGS+set}" = set; then
|
|
||||||
LBL_CFLAGS="$CFLAGS"
|
|
||||||
fi
|
|
||||||
if test -z "$CC" ; then
|
|
||||||
case "$target_os" in
|
|
||||||
|
|
||||||
bsdi*)
|
|
||||||
AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
|
|
||||||
if test $SHLICC2 = yes ; then
|
|
||||||
CC=shlicc2
|
|
||||||
export CC
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
AC_PROG_CC
|
|
||||||
if test $ac_cv_prog_gcc = yes ; then
|
|
||||||
if test "$SHLICC2" = yes ; then
|
|
||||||
ac_cv_gcc_vers=2
|
|
||||||
$1=-O2
|
|
||||||
else
|
|
||||||
AC_MSG_CHECKING(gcc version)
|
|
||||||
AC_CACHE_VAL(ac_cv_gcc_vers,
|
|
||||||
ac_cv_gcc_vers=`$CC -v 2>&1 | \
|
|
||||||
sed -n -e '$s/.* //' -e '$s/\..*//p'`)
|
|
||||||
AC_MSG_RESULT($ac_cv_gcc_vers)
|
|
||||||
if test $ac_cv_gcc_vers -gt 1 ; then
|
|
||||||
$1=-O2
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
AC_MSG_CHECKING(that $CC handles ansi prototypes)
|
|
||||||
AC_CACHE_VAL(ac_cv_cc_ansi_prototypes,
|
|
||||||
AC_TRY_COMPILE(
|
|
||||||
[#include <sys/types.h>],
|
|
||||||
[int frob(int, char *)],
|
|
||||||
ac_cv_cc_ansi_prototypes=yes,
|
|
||||||
ac_cv_cc_ansi_prototypes=no))
|
|
||||||
AC_MSG_RESULT($ac_cv_cc_ansi_prototypes)
|
|
||||||
if test $ac_cv_cc_ansi_prototypes = no ; then
|
|
||||||
case "$target_os" in
|
|
||||||
|
|
||||||
hpux*)
|
|
||||||
AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
|
|
||||||
savedcflags="$CFLAGS"
|
|
||||||
CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
|
|
||||||
AC_CACHE_VAL(ac_cv_cc_hpux_cc_aa,
|
|
||||||
AC_TRY_COMPILE(
|
|
||||||
[#include <sys/types.h>],
|
|
||||||
[int frob(int, char *)],
|
|
||||||
ac_cv_cc_hpux_cc_aa=yes,
|
|
||||||
ac_cv_cc_hpux_cc_aa=no))
|
|
||||||
AC_MSG_RESULT($ac_cv_cc_hpux_cc_aa)
|
|
||||||
if test $ac_cv_cc_hpux_cc_aa = no ; then
|
|
||||||
AC_MSG_ERROR(see the INSTALL for more info)
|
|
||||||
fi
|
|
||||||
CFLAGS="$savedcflags"
|
|
||||||
V_CCOPT="-Aa $V_CCOPT"
|
|
||||||
AC_DEFINE(_HPUX_SOURCE)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR(see the INSTALL for more info)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
$2=-I/usr/local/include
|
|
||||||
|
|
||||||
case "$target_os" in
|
|
||||||
|
|
||||||
irix*)
|
|
||||||
V_CCOPT="$V_CCOPT -xansi -signed -g3"
|
|
||||||
;;
|
|
||||||
|
|
||||||
osf*)
|
|
||||||
V_CCOPT="$V_CCOPT -g3"
|
|
||||||
;;
|
|
||||||
|
|
||||||
ultrix*)
|
|
||||||
AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
|
|
||||||
AC_CACHE_VAL(ac_cv_cc_const_proto,
|
|
||||||
AC_TRY_COMPILE(
|
|
||||||
[#include <sys/types.h>],
|
|
||||||
[struct a { int b; };
|
|
||||||
void c(const struct a *)],
|
|
||||||
ac_cv_cc_const_proto=yes,
|
|
||||||
ac_cv_cc_const_proto=no))
|
|
||||||
AC_MSG_RESULT($ac_cv_cc_const_proto)
|
|
||||||
if test $ac_cv_cc_const_proto = no ; then
|
|
||||||
AC_DEFINE(const,)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Use pfopen.c if available and pfopen() not in standard libraries
|
|
||||||
dnl Require libpcap
|
|
||||||
dnl Look for libpcap in ..
|
|
||||||
dnl Use the installed libpcap if there is no local version
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_LIBPCAP(pcapdep, incls)
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl $1 (pcapdep set)
|
|
||||||
dnl $2 (incls appended)
|
|
||||||
dnl LIBS
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_LIBPCAP,
|
|
||||||
[pfopen=/usr/examples/packetfilter/pfopen.c
|
|
||||||
if test -f $pfopen ; then
|
|
||||||
AC_CHECK_FUNCS(pfopen)
|
|
||||||
if test $ac_cv_func_pfopen = "no" ; then
|
|
||||||
AC_MSG_RESULT(Using $pfopen)
|
|
||||||
LIBS="$LIBS $pfopen"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AC_MSG_CHECKING(for local pcap library)
|
|
||||||
libpcap=FAIL
|
|
||||||
lastdir=FAIL
|
|
||||||
places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
|
|
||||||
egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
|
|
||||||
for dir in $places ../libpcap libpcap ; do
|
|
||||||
basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
|
|
||||||
if test $lastdir = $basedir ; then
|
|
||||||
dnl skip alphas when an actual release is present
|
|
||||||
continue;
|
|
||||||
fi
|
|
||||||
lastdir=$dir
|
|
||||||
if test -r $dir/pcap.c ; then
|
|
||||||
libpcap=$dir/libpcap.a
|
|
||||||
d=$dir
|
|
||||||
dnl continue and select the last one that exists
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if test $libpcap = FAIL ; then
|
|
||||||
AC_MSG_RESULT(not found)
|
|
||||||
AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
|
|
||||||
if test $libpcap = FAIL ; then
|
|
||||||
AC_MSG_ERROR(see the INSTALL doc for more info)
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
$1=$libpcap
|
|
||||||
$2="-I$d $$2"
|
|
||||||
AC_MSG_RESULT($libpcap)
|
|
||||||
fi
|
|
||||||
LIBS="$libpcap $LIBS"])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Define RETSIGTYPE and RETSIGVAL
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_TYPE_SIGNAL
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl RETSIGTYPE (defined)
|
|
||||||
dnl RETSIGVAL (defined)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_TYPE_SIGNAL,
|
|
||||||
[AC_TYPE_SIGNAL
|
|
||||||
if test "$ac_cv_type_signal" = void ; then
|
|
||||||
AC_DEFINE(RETSIGVAL,)
|
|
||||||
else
|
|
||||||
AC_DEFINE(RETSIGVAL,(0))
|
|
||||||
fi
|
|
||||||
case "$target_os" in
|
|
||||||
|
|
||||||
irix*)
|
|
||||||
AC_DEFINE(_BSD_SIGNALS)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
AC_CHECK_FUNCS(sigset)
|
|
||||||
if test $ac_cv_func_sigset = yes ; then
|
|
||||||
AC_DEFINE(signal, sigset)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl If using gcc, see if fixincludes should be run
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_FIXINCLUDES
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_FIXINCLUDES,
|
|
||||||
[if test $ac_cv_prog_gcc = yes ; then
|
|
||||||
AC_MSG_CHECKING(if fixincludes is needed)
|
|
||||||
AC_CACHE_VAL(ac_cv_gcc_fixincludes,
|
|
||||||
AC_TRY_COMPILE(
|
|
||||||
[/*
|
|
||||||
* This generates a "duplicate case value" when fixincludes
|
|
||||||
* has not be run.
|
|
||||||
*/
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/time.h>
|
|
||||||
# include <sys/ioctl.h>
|
|
||||||
# ifdef HAVE_SYS_IOCCOM_H
|
|
||||||
# include <sys/ioccom.h>
|
|
||||||
# endif],
|
|
||||||
[switch (0) {
|
|
||||||
case _IO('A', 1):;
|
|
||||||
case _IO('B', 1):;
|
|
||||||
}],
|
|
||||||
ac_cv_gcc_fixincludes=yes,
|
|
||||||
ac_cv_gcc_fixincludes=no))
|
|
||||||
AC_MSG_RESULT($ac_cv_gcc_fixincludes)
|
|
||||||
if test $ac_cv_gcc_fixincludes = no ; then
|
|
||||||
# Don't cache failure
|
|
||||||
unset ac_cv_gcc_fixincludes
|
|
||||||
AC_MSG_ERROR(see the INSTALL for more info)
|
|
||||||
fi
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check for flex, default to lex
|
|
||||||
dnl Require flex 2.4 or higher
|
|
||||||
dnl Check for bison, default to yacc
|
|
||||||
dnl Default to lex/yacc if both flex and bison are not available
|
|
||||||
dnl Define the yy prefix string if using flex and bison
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl $1 (lex set)
|
|
||||||
dnl $2 (yacc appended)
|
|
||||||
dnl $3 (optional flex and bison -P prefix)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_LEX_AND_YACC,
|
|
||||||
[AC_CHECK_PROGS($1, flex, lex)
|
|
||||||
if test "$$1" = flex ; then
|
|
||||||
# The -V flag was added in 2.4
|
|
||||||
AC_MSG_CHECKING(for flex 2.4 or higher)
|
|
||||||
AC_CACHE_VAL(ac_cv_flex_v24,
|
|
||||||
if flex -V >/dev/null 2>&1; then
|
|
||||||
ac_cv_flex_v24=yes
|
|
||||||
else
|
|
||||||
ac_cv_flex_v24=no
|
|
||||||
fi)
|
|
||||||
AC_MSG_RESULT($ac_cv_flex_v24)
|
|
||||||
if test $ac_cv_flex_v24 = no ; then
|
|
||||||
s="2.4 or higher required"
|
|
||||||
AC_MSG_WARN(ignoring obsolete flex executable ($s))
|
|
||||||
$1=lex
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AC_CHECK_PROGS($2, bison, yacc)
|
|
||||||
if test "$$2" = bison ; then
|
|
||||||
$2="$$2 -y"
|
|
||||||
fi
|
|
||||||
if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
|
|
||||||
AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
|
|
||||||
$1=lex
|
|
||||||
$2=yacc
|
|
||||||
fi
|
|
||||||
if test "$$1" = flex -a -n "$3" ; then
|
|
||||||
$1="$$1 -P$3"
|
|
||||||
$2="$$2 -p $3"
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Checks to see if union wait is used with WEXITSTATUS()
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_UNION_WAIT
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl DECLWAITSTATUS (defined)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_UNION_WAIT,
|
|
||||||
[AC_MSG_CHECKING(if union wait is used)
|
|
||||||
AC_CACHE_VAL(ac_cv_union_wait,
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/wait.h>],
|
|
||||||
[int status;
|
|
||||||
u_int i = WEXITSTATUS(status);
|
|
||||||
u_int j = waitpid(0, &status, 0);],
|
|
||||||
ac_cv_union_wait=no,
|
|
||||||
ac_cv_union_wait=yes))
|
|
||||||
AC_MSG_RESULT($ac_cv_union_wait)
|
|
||||||
if test $ac_cv_union_wait = yes ; then
|
|
||||||
AC_DEFINE(DECLWAITSTATUS,union wait)
|
|
||||||
else
|
|
||||||
AC_DEFINE(DECLWAITSTATUS,int)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_SOCKADDR_SA_LEN
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl HAVE_SOCKADDR_SA_LEN (defined)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
|
|
||||||
[AC_MSG_CHECKING(if sockaddr struct has sa_len member)
|
|
||||||
AC_CACHE_VAL(ac_cv_sockaddr_has_sa_len,
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/socket.h>],
|
|
||||||
[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
|
|
||||||
ac_cv_sockaddr_has_sa_len=yes,
|
|
||||||
ac_cv_sockaddr_has_sa_len=no))
|
|
||||||
AC_MSG_RESULT($ac_cv_sockaddr_has_sa_len)
|
|
||||||
if test $ac_cv_sockaddr_has_sa_len = yes ; then
|
|
||||||
AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Checks to see if -R is used
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_HAVE_RUN_PATH
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl ac_cv_have_run_path (yes or no)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
|
|
||||||
[AC_MSG_CHECKING(for ${CC-cc} -R)
|
|
||||||
AC_CACHE_VAL(ac_cv_have_run_path,
|
|
||||||
[echo 'main(){}' > conftest.c
|
|
||||||
${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
|
|
||||||
if test ! -s conftest.out ; then
|
|
||||||
ac_cv_have_run_path=yes
|
|
||||||
else
|
|
||||||
ac_cv_have_run_path=no
|
|
||||||
fi
|
|
||||||
rm -f conftest*])
|
|
||||||
AC_MSG_RESULT($ac_cv_have_run_path)
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Checks to see if unaligned memory accesses fail
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_UNALIGNED_ACCESS
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl LBL_ALIGN (DEFINED)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
|
|
||||||
[AC_MSG_CHECKING(if unaligned accesses fail)
|
|
||||||
AC_CACHE_VAL(ac_cv_unaligned_fail,
|
|
||||||
[case "$target_cpu" in
|
|
||||||
|
|
||||||
alpha|hp*|mips|sparc)
|
|
||||||
ac_cv_unaligned_fail=yes
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
cat >conftest.c <<EOF
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/wait.h>
|
|
||||||
# include <stdio.h>
|
|
||||||
unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
|
|
||||||
main() {
|
|
||||||
unsigned int i;
|
|
||||||
pid_t pid;
|
|
||||||
int status;
|
|
||||||
/* avoid "core dumped" message */
|
|
||||||
pid = fork();
|
|
||||||
if (pid < 0)
|
|
||||||
exit(2);
|
|
||||||
if (pid > 0) {
|
|
||||||
/* parent */
|
|
||||||
pid = waitpid(pid, &status, 0);
|
|
||||||
if (pid < 0)
|
|
||||||
exit(3);
|
|
||||||
exit(!WIFEXITED(status));
|
|
||||||
}
|
|
||||||
/* child */
|
|
||||||
i = *(unsigned int *)&a[[1]];
|
|
||||||
printf("%d\n", i);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
|
|
||||||
conftest.c $LIBS >/dev/null 2>&1
|
|
||||||
if test ! -x conftest ; then
|
|
||||||
dnl failed to compile for some reason
|
|
||||||
ac_cv_unaligned_fail=yes
|
|
||||||
else
|
|
||||||
./conftest >conftest.out
|
|
||||||
if test ! -s conftest.out ; then
|
|
||||||
ac_cv_unaligned_fail=yes
|
|
||||||
else
|
|
||||||
ac_cv_unaligned_fail=no
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -f conftest* core core.conftest
|
|
||||||
;;
|
|
||||||
esac])
|
|
||||||
AC_MSG_RESULT($ac_cv_unaligned_fail)
|
|
||||||
if test $ac_cv_unaligned_fail = yes ; then
|
|
||||||
AC_DEFINE(LBL_ALIGN)
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl If using gcc and the file .devel exists:
|
|
||||||
dnl Compile with -g (if supported) and -Wall
|
|
||||||
dnl If using gcc 2, do extra prototype checking
|
|
||||||
dnl If an os prototype include exists, symlink os-proto.h to it
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_DEVEL(copt)
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl $1 (copt appended)
|
|
||||||
dnl HAVE_OS_PROTO_H (defined)
|
|
||||||
dnl os-proto.h (symlinked)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_DEVEL,
|
|
||||||
[rm -f os-proto.h
|
|
||||||
if test "${LBL_CFLAGS+set}" = set; then
|
|
||||||
$1="$$1 ${LBL_CFLAGS}"
|
|
||||||
fi
|
|
||||||
if test $ac_cv_prog_gcc = yes -a -f .devel ; then
|
|
||||||
if test "${LBL_CFLAGS+set}" != set; then
|
|
||||||
if test "$ac_cv_prog_cc_g" = yes ; then
|
|
||||||
$1="-g $$1"
|
|
||||||
fi
|
|
||||||
$1="$$1 -Wall"
|
|
||||||
if test $ac_cv_gcc_vers -gt 1 ; then
|
|
||||||
$1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
|
|
||||||
name="lbl/os-$os.h"
|
|
||||||
if test -f $name ; then
|
|
||||||
ln -s $name os-proto.h
|
|
||||||
AC_DEFINE(HAVE_OS_PROTO_H)
|
|
||||||
else
|
|
||||||
AC_MSG_WARN(can't find $name)
|
|
||||||
fi
|
|
||||||
fi])
|
|
@ -20,10 +20,16 @@
|
|||||||
*
|
*
|
||||||
* Internet, ethernet, port, and protocol string to address
|
* Internet, ethernet, port, and protocol string to address
|
||||||
* and address to string conversion routines
|
* and address to string conversion routines
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: addrtoname.c,v 1.61 97/06/15 13:20:18 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.64 1999/11/21 09:36:44 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -39,6 +45,10 @@ struct rtentry;
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <net/ethernet.h>
|
#include <net/ethernet.h>
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
#include <netinet6/ip6.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -85,6 +95,16 @@ struct hnamemem eprototable[HASHNAMESIZE];
|
|||||||
struct hnamemem dnaddrtable[HASHNAMESIZE];
|
struct hnamemem dnaddrtable[HASHNAMESIZE];
|
||||||
struct hnamemem llcsaptable[HASHNAMESIZE];
|
struct hnamemem llcsaptable[HASHNAMESIZE];
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
struct h6namemem {
|
||||||
|
struct in6_addr addr;
|
||||||
|
char *name;
|
||||||
|
struct h6namemem *nxt;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct h6namemem h6nametable[HASHNAMESIZE];
|
||||||
|
#endif /* INET6 */
|
||||||
|
|
||||||
struct enamemem {
|
struct enamemem {
|
||||||
u_short e_addr0;
|
u_short e_addr0;
|
||||||
u_short e_addr1;
|
u_short e_addr1;
|
||||||
@ -171,39 +191,7 @@ getname(const u_char *ap)
|
|||||||
#ifndef LBL_ALIGN
|
#ifndef LBL_ALIGN
|
||||||
addr = *(const u_int32_t *)ap;
|
addr = *(const u_int32_t *)ap;
|
||||||
#else
|
#else
|
||||||
/*
|
memcpy(&addr, ap, sizeof(addr));
|
||||||
* Extract 32 bits in network order, dealing with alignment.
|
|
||||||
*/
|
|
||||||
switch ((long)ap & 3) {
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
addr = *(u_int32_t *)ap;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
addr = ((u_int32_t)*(u_short *)ap << 16) |
|
|
||||||
(u_int32_t)*(u_short *)(ap + 2);
|
|
||||||
#else
|
|
||||||
addr = ((u_int32_t)*(u_short *)(ap + 2) << 16) |
|
|
||||||
(u_int32_t)*(u_short *)ap;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
addr = ((u_int32_t)ap[0] << 24) |
|
|
||||||
((u_int32_t)ap[1] << 16) |
|
|
||||||
((u_int32_t)ap[2] << 8) |
|
|
||||||
(u_int32_t)ap[3];
|
|
||||||
#else
|
|
||||||
addr = ((u_int32_t)ap[3] << 24) |
|
|
||||||
((u_int32_t)ap[2] << 16) |
|
|
||||||
((u_int32_t)ap[1] << 8) |
|
|
||||||
(u_int32_t)ap[0];
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
p = &hnametable[addr & (HASHNAMESIZE-1)];
|
p = &hnametable[addr & (HASHNAMESIZE-1)];
|
||||||
for (; p->nxt; p = p->nxt) {
|
for (; p->nxt; p = p->nxt) {
|
||||||
@ -249,6 +237,71 @@ getname(const u_char *ap)
|
|||||||
return (p->name);
|
return (p->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
/*
|
||||||
|
* Return a name for the IP6 address pointed to by ap. This address
|
||||||
|
* is assumed to be in network byte order.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
getname6(const u_char *ap)
|
||||||
|
{
|
||||||
|
register struct hostent *hp;
|
||||||
|
struct in6_addr addr;
|
||||||
|
static struct h6namemem *p; /* static for longjmp() */
|
||||||
|
register char *cp;
|
||||||
|
char ntop_buf[INET6_ADDRSTRLEN];
|
||||||
|
|
||||||
|
memcpy(&addr, ap, sizeof(addr));
|
||||||
|
p = &h6nametable[*(u_int16_t *)&addr.s6_addr[14] & (HASHNAMESIZE-1)];
|
||||||
|
for (; p->nxt; p = p->nxt) {
|
||||||
|
if (memcmp(&p->addr, &addr, sizeof(addr)) == 0)
|
||||||
|
return (p->name);
|
||||||
|
}
|
||||||
|
p->addr = addr;
|
||||||
|
p->nxt = newh6namemem();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only print names when:
|
||||||
|
* (1) -n was not given.
|
||||||
|
* (2) Address is foreign and -f was given. (If -f was not
|
||||||
|
* give, f_netmask and f_local are 0 and the test
|
||||||
|
* evaluates to true)
|
||||||
|
* (3) -a was given or the host portion is not all ones
|
||||||
|
* nor all zeros (i.e. not a network or broadcast address)
|
||||||
|
*/
|
||||||
|
if (!nflag
|
||||||
|
#if 0
|
||||||
|
&&
|
||||||
|
(addr & f_netmask) == f_localnet &&
|
||||||
|
(aflag ||
|
||||||
|
!((addr & ~netmask) == 0 || (addr | netmask) == 0xffffffff))
|
||||||
|
#endif
|
||||||
|
) {
|
||||||
|
if (!setjmp(getname_env)) {
|
||||||
|
(void)setsignal(SIGALRM, nohostname);
|
||||||
|
(void)alarm(20);
|
||||||
|
hp = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET6);
|
||||||
|
(void)alarm(0);
|
||||||
|
if (hp) {
|
||||||
|
char *dotp;
|
||||||
|
|
||||||
|
p->name = savestr(hp->h_name);
|
||||||
|
if (Nflag) {
|
||||||
|
/* Remove domain qualifications */
|
||||||
|
dotp = strchr(p->name, '.');
|
||||||
|
if (dotp)
|
||||||
|
*dotp = '\0';
|
||||||
|
}
|
||||||
|
return (p->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cp = (char *)inet_ntop(AF_INET6, &addr, ntop_buf, sizeof(ntop_buf));
|
||||||
|
p->name = savestr(cp);
|
||||||
|
return (p->name);
|
||||||
|
}
|
||||||
|
#endif /* INET6 */
|
||||||
|
|
||||||
static char hex[] = "0123456789abcdef";
|
static char hex[] = "0123456789abcdef";
|
||||||
|
|
||||||
|
|
||||||
@ -765,3 +818,24 @@ newhnamemem(void)
|
|||||||
p = ptr++;
|
p = ptr++;
|
||||||
return (p);
|
return (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
/* Return a zero'ed h6namemem struct and cuts down on calloc() overhead */
|
||||||
|
struct h6namemem *
|
||||||
|
newh6namemem(void)
|
||||||
|
{
|
||||||
|
register struct h6namemem *p;
|
||||||
|
static struct h6namemem *ptr = NULL;
|
||||||
|
static u_int num = 0;
|
||||||
|
|
||||||
|
if (num <= 0) {
|
||||||
|
num = 64;
|
||||||
|
ptr = (struct h6namemem *)calloc(num, sizeof (*ptr));
|
||||||
|
if (ptr == NULL)
|
||||||
|
error("newh6namemem: calloc");
|
||||||
|
}
|
||||||
|
--num;
|
||||||
|
p = ptr++;
|
||||||
|
return (p);
|
||||||
|
}
|
||||||
|
#endif /* INET6 */
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* @(#) $Header: ethertype.h,v 1.6 96/07/14 18:21:49 leres Exp $ (LBL)
|
* @(#) $Header: /tcpdump/master/tcpdump/ethertype.h,v 1.7.2.1 2000/01/29 22:00:12 fenner Exp $ (LBL)
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -72,14 +72,20 @@
|
|||||||
#ifndef ETHERTYPE_AARP
|
#ifndef ETHERTYPE_AARP
|
||||||
#define ETHERTYPE_AARP 0x80f3
|
#define ETHERTYPE_AARP 0x80f3
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef ETHERTYPE_8021Q
|
||||||
|
#define ETHERTYPE_8021Q 0x8100
|
||||||
|
#endif
|
||||||
#ifndef ETHERTYPE_IPX
|
#ifndef ETHERTYPE_IPX
|
||||||
#define ETHERTYPE_IPX 0x8137
|
#define ETHERTYPE_IPX 0x8137
|
||||||
#endif
|
#endif
|
||||||
#ifndef ETHERTYPE_PPPOE_DISC
|
#ifndef ETHERTYPE_IPV6
|
||||||
#define ETHERTYPE_PPPOE_DISC 0x8863
|
#define ETHERTYPE_IPV6 0x86dd
|
||||||
#endif
|
#endif
|
||||||
#ifndef ETHERTYPE_PPPOE_SESS
|
#ifndef ETHERTYPE_PPPOED
|
||||||
#define ETHERTYPE_PPPOE_SESS 0x8864
|
#define ETHERTYPE_PPPOED 0x8863
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_PPPOES
|
||||||
|
#define ETHERTYPE_PPPOES 0x8864
|
||||||
#endif
|
#endif
|
||||||
#ifndef ETHERTYPE_LOOPBACK
|
#ifndef ETHERTYPE_LOOPBACK
|
||||||
#define ETHERTYPE_LOOPBACK 0x9000
|
#define ETHERTYPE_LOOPBACK 0x9000
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* @(#) $Header: interface.h,v 1.105 97/04/26 13:39:58 leres Exp $ (LBL)
|
* @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.118 1999/12/22 15:44:09 itojun Exp $ (LBL)
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -42,10 +42,16 @@ extern int fflag; /* don't translate "foreign" IP address */
|
|||||||
extern int nflag; /* leave addresses as numbers */
|
extern int nflag; /* leave addresses as numbers */
|
||||||
extern int Nflag; /* remove domains from printed host names */
|
extern int Nflag; /* remove domains from printed host names */
|
||||||
extern int qflag; /* quick (shorter) output */
|
extern int qflag; /* quick (shorter) output */
|
||||||
|
extern int Rflag; /* print sequence # field in AH/ESP*/
|
||||||
|
extern int sflag; /* use the libsmi to translate OIDs */
|
||||||
extern int Sflag; /* print raw TCP sequence numbers */
|
extern int Sflag; /* print raw TCP sequence numbers */
|
||||||
extern int tflag; /* print packet arrival time */
|
extern int tflag; /* print packet arrival time */
|
||||||
extern int vflag; /* verbose */
|
extern int vflag; /* verbose */
|
||||||
extern int xflag; /* print packet in hex */
|
extern int xflag; /* print packet in hex */
|
||||||
|
extern int Xflag; /* print packet in hex/ascii */
|
||||||
|
|
||||||
|
extern char *ahsecret;
|
||||||
|
extern char *espsecret;
|
||||||
|
|
||||||
extern int packettype; /* as specified by -T */
|
extern int packettype; /* as specified by -T */
|
||||||
#define PT_VAT 1 /* Visual Audio Tool */
|
#define PT_VAT 1 /* Visual Audio Tool */
|
||||||
@ -53,6 +59,7 @@ extern int packettype; /* as specified by -T */
|
|||||||
#define PT_RPC 3 /* Remote Procedure Call */
|
#define PT_RPC 3 /* Remote Procedure Call */
|
||||||
#define PT_RTP 4 /* Real-Time Applications protocol */
|
#define PT_RTP 4 /* Real-Time Applications protocol */
|
||||||
#define PT_RTCP 5 /* Real-Time Applications control protocol */
|
#define PT_RTCP 5 /* Real-Time Applications control protocol */
|
||||||
|
#define PT_SNMP 6 /* Simple Network Management Protocol */
|
||||||
|
|
||||||
#ifndef min
|
#ifndef min
|
||||||
#define min(a,b) ((a)>(b)?(b):(a))
|
#define min(a,b) ((a)>(b)?(b):(a))
|
||||||
@ -61,6 +68,7 @@ extern int packettype; /* as specified by -T */
|
|||||||
#define max(a,b) ((b)>(a)?(b):(a))
|
#define max(a,b) ((b)>(a)?(b):(a))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef INET6
|
||||||
/*
|
/*
|
||||||
* The default snapshot length. This value allows most printers to print
|
* The default snapshot length. This value allows most printers to print
|
||||||
* useful information while keeping the amount of unwanted data down.
|
* useful information while keeping the amount of unwanted data down.
|
||||||
@ -68,6 +76,9 @@ extern int packettype; /* as specified by -T */
|
|||||||
* 14 bytes of data (assuming no ip options).
|
* 14 bytes of data (assuming no ip options).
|
||||||
*/
|
*/
|
||||||
#define DEFAULT_SNAPLEN 68
|
#define DEFAULT_SNAPLEN 68
|
||||||
|
#else
|
||||||
|
#define DEFAULT_SNAPLEN 96
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef BIG_ENDIAN
|
#ifndef BIG_ENDIAN
|
||||||
#define BIG_ENDIAN 4321
|
#define BIG_ENDIAN 4321
|
||||||
@ -133,6 +144,7 @@ struct timeval;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void ts_print(const struct timeval *);
|
extern void ts_print(const struct timeval *);
|
||||||
|
extern void relts_print(int);
|
||||||
|
|
||||||
extern int fn_print(const u_char *, const u_char *);
|
extern int fn_print(const u_char *, const u_char *);
|
||||||
extern int fn_printn(const u_char *, u_int, const u_char *);
|
extern int fn_printn(const u_char *, u_int, const u_char *);
|
||||||
@ -162,6 +174,11 @@ extern char *dnnum_string(u_short);
|
|||||||
struct pcap_pkthdr;
|
struct pcap_pkthdr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern void ascii_print_with_offset(const u_char *, u_int, u_int);
|
||||||
|
extern void ascii_print(const u_char *, u_int);
|
||||||
|
extern void hex_print_with_offset(const u_char *, u_int, u_int);
|
||||||
|
extern void telnet_print(const u_char *, u_int);
|
||||||
|
extern void hex_print(const u_char *, u_int);
|
||||||
extern int ether_encap_print(u_short, const u_char *, u_int, u_int);
|
extern int ether_encap_print(u_short, const u_char *, u_int, u_int);
|
||||||
extern int llc_print(const u_char *, u_int, u_int, const u_char *,
|
extern int llc_print(const u_char *, u_int, u_int, const u_char *,
|
||||||
const u_char *);
|
const u_char *);
|
||||||
@ -170,6 +187,7 @@ extern void arp_print(const u_char *, u_int, u_int);
|
|||||||
extern void atalk_print(const u_char *, u_int);
|
extern void atalk_print(const u_char *, u_int);
|
||||||
extern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
extern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
extern void bootp_print(const u_char *, u_int, u_short, u_short);
|
extern void bootp_print(const u_char *, u_int, u_short, u_short);
|
||||||
|
extern void bgp_print(const u_char *, int);
|
||||||
extern void decnet_print(const u_char *, u_int, u_int);
|
extern void decnet_print(const u_char *, u_int, u_int);
|
||||||
extern void default_print(const u_char *, u_int);
|
extern void default_print(const u_char *, u_int);
|
||||||
extern void default_print_unaligned(const u_char *, u_int);
|
extern void default_print_unaligned(const u_char *, u_int);
|
||||||
@ -181,7 +199,7 @@ extern void token_if_print(u_char *, const struct pcap_pkthdr *,
|
|||||||
const u_char *);
|
const u_char *);
|
||||||
extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
extern void gre_print(const u_char *, u_int);
|
extern void gre_print(const u_char *, u_int);
|
||||||
extern void icmp_print(const u_char *, const u_char *);
|
extern void icmp_print(const u_char *, u_int, const u_char *);
|
||||||
extern void igrp_print(const u_char *, u_int, const u_char *);
|
extern void igrp_print(const u_char *, u_int, const u_char *);
|
||||||
extern void ip_print(const u_char *, u_int);
|
extern void ip_print(const u_char *, u_int);
|
||||||
extern void ipx_print(const u_char *, u_int);
|
extern void ipx_print(const u_char *, u_int);
|
||||||
@ -194,19 +212,55 @@ extern void ns_print(const u_char *, u_int);
|
|||||||
extern void ntp_print(const u_char *, u_int);
|
extern void ntp_print(const u_char *, u_int);
|
||||||
extern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
extern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
extern void ospf_print(const u_char *, u_int, const u_char *);
|
extern void ospf_print(const u_char *, u_int, const u_char *);
|
||||||
|
extern void pimv1_print(const u_char *, u_int);
|
||||||
|
extern void cisco_autorp_print(const u_char *, u_int);
|
||||||
|
extern void mobile_print(const u_char *, u_int);
|
||||||
extern void pim_print(const u_char *, u_int);
|
extern void pim_print(const u_char *, u_int);
|
||||||
|
extern void pppoe_print(const u_char *, u_int);
|
||||||
extern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
extern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
extern void ppp_bsdos_if_print(u_char *, const struct pcap_pkthdr *,
|
extern void ppp_bsdos_if_print(u_char *, const struct pcap_pkthdr *,
|
||||||
const u_char *);
|
const u_char *);
|
||||||
extern void pppoe_print(const u_char *, u_int);
|
extern int vjc_print(register const char *, register u_int, u_short);
|
||||||
extern void raw_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
extern void raw_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
extern void rip_print(const u_char *, u_int);
|
extern void rip_print(const u_char *, u_int);
|
||||||
extern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
extern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
|
extern void lane_if_print(u_char *, const struct pcap_pkthdr *,const u_char *);
|
||||||
|
extern void cip_if_print(u_char *, const struct pcap_pkthdr *,const u_char *);
|
||||||
extern void sl_bsdos_if_print(u_char *, const struct pcap_pkthdr *,
|
extern void sl_bsdos_if_print(u_char *, const struct pcap_pkthdr *,
|
||||||
const u_char *);
|
const u_char *);
|
||||||
|
extern void chdlc_if_print(u_char *, const struct pcap_pkthdr *,
|
||||||
|
const u_char *);
|
||||||
extern void snmp_print(const u_char *, u_int);
|
extern void snmp_print(const u_char *, u_int);
|
||||||
extern void sunrpcrequest_print(const u_char *, u_int, const u_char *);
|
extern void sunrpcrequest_print(const u_char *, u_int, const u_char *);
|
||||||
extern void tcp_print(const u_char *, u_int, const u_char *);
|
extern void tcp_print(const u_char *, u_int, const u_char *);
|
||||||
extern void tftp_print(const u_char *, u_int);
|
extern void tftp_print(const u_char *, u_int);
|
||||||
extern void udp_print(const u_char *, u_int, const u_char *);
|
extern void udp_print(const u_char *, u_int, const u_char *);
|
||||||
extern void wb_print(const void *, u_int);
|
extern void wb_print(const void *, u_int);
|
||||||
|
extern int ah_print(register const u_char *, register const u_char *);
|
||||||
|
extern int esp_print(register const u_char *, register const u_char *, int *);
|
||||||
|
extern void isakmp_print(const u_char *, u_int, const u_char *);
|
||||||
|
extern int ipcomp_print(register const u_char *, register const u_char *, int *);
|
||||||
|
extern void rx_print(register const u_char *, int, int, int, u_char *);
|
||||||
|
extern void netbeui_print(const u_char *, const u_char *);
|
||||||
|
extern void ipx_netbios_print(const u_char *, const u_char *);
|
||||||
|
extern void nbt_tcp_print(const u_char *, int);
|
||||||
|
extern void nbt_udp137_print(const u_char *data, int);
|
||||||
|
extern void nbt_udp138_print(const u_char *data, int);
|
||||||
|
extern char *smb_errstr(int, int);
|
||||||
|
extern void print_data(const unsigned char *, int);
|
||||||
|
extern void l2tp_print(const u_char *, u_int);
|
||||||
|
extern void lcp_print(const u_char *, u_int);
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
extern void ip6_print(const u_char *, int);
|
||||||
|
extern void ip6_opt_print(const u_char *, int);
|
||||||
|
extern int hbhopt_print(const u_char *);
|
||||||
|
extern int dstopt_print(const u_char *);
|
||||||
|
extern int frag6_print(const u_char *, const u_char *);
|
||||||
|
extern void icmp6_print(const u_char *, const u_char *);
|
||||||
|
extern void ripng_print(const u_char *, int);
|
||||||
|
extern int rt6_print(const u_char *, const u_char *);
|
||||||
|
extern void ospf6_print(const u_char *, u_int);
|
||||||
|
extern void dhcp6_print(const u_char *, u_int, u_short, u_short);
|
||||||
|
#endif /*INET6*/
|
||||||
|
extern u_short in_cksum(const u_short *addr, register int len, u_short csum);
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
|
* $FreeBSD$
|
||||||
* @(#)nfsproto.h 8.2 (Berkeley) 3/30/95
|
* @(#)nfsproto.h 8.2 (Berkeley) 3/30/95
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -285,6 +286,10 @@ struct nfs_uquad {
|
|||||||
};
|
};
|
||||||
typedef struct nfs_uquad nfsuint64;
|
typedef struct nfs_uquad nfsuint64;
|
||||||
|
|
||||||
|
#if 0 /* XXX - this doesn't seemed to be used and it doesn't work
|
||||||
|
* with non-gcc, so comment it out for now.
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used to convert between two u_longs and a u_quad_t.
|
* Used to convert between two u_longs and a u_quad_t.
|
||||||
*/
|
*/
|
||||||
@ -294,6 +299,8 @@ union nfs_quadconvert {
|
|||||||
};
|
};
|
||||||
typedef union nfs_quadconvert nfsquad_t;
|
typedef union nfs_quadconvert nfsquad_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NFS Version 3 special file number.
|
* NFS Version 3 special file number.
|
||||||
*/
|
*/
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
* $Header: nfsfh.h,v 1.6 96/12/16 03:40:31 leres Exp $
|
* $Header: /tcpdump/master/tcpdump/nfsfh.h,v 1.8 1999/12/15 06:49:05 fenner Exp $
|
||||||
*
|
*
|
||||||
* nfsfh.h - NFS file handle definitions (for portable use)
|
* nfsfh.h - NFS file handle definitions (for portable use)
|
||||||
*
|
*
|
||||||
* Jeffrey C. Mogul
|
* Jeffrey C. Mogul
|
||||||
* Digital Equipment Corporation
|
* Digital Equipment Corporation
|
||||||
* Western Research Laboratory
|
* Western Research Laboratory
|
||||||
*/
|
* $FreeBSD$
|
||||||
|
* $NetBSD: nfsfh.h,v 1.1.1.2 1997/10/03 17:25:13 christos Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Internal representation of dev_t, because different NFS servers
|
* Internal representation of dev_t, because different NFS servers
|
||||||
|
@ -5,11 +5,17 @@
|
|||||||
* Jeffrey C. Mogul
|
* Jeffrey C. Mogul
|
||||||
* Digital Equipment Corporation
|
* Digital Equipment Corporation
|
||||||
* Western Research Laboratory
|
* Western Research Laboratory
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: parsenfsfh.c,v 1.14 97/06/15 13:20:27 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/parsenfsfh.c,v 1.16 1999/11/21 09:36:47 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* @(#) $Header: ppp.h,v 1.7 95/05/04 17:52:46 mccanne Exp $ (LBL) */
|
/* @(#) $Header: /tcpdump/master/tcpdump/ppp.h,v 1.8 1999/11/21 03:43:56 assar Exp $ (LBL) */
|
||||||
/*
|
/*
|
||||||
* Point to Point Protocol (PPP) RFC1331
|
* Point to Point Protocol (PPP) RFC1331
|
||||||
*
|
*
|
||||||
@ -56,3 +56,4 @@
|
|||||||
#define PPP_PAP 0xc023 /* Password Authentication Protocol */
|
#define PPP_PAP 0xc023 /* Password Authentication Protocol */
|
||||||
#define PPP_LQM 0xc025 /* Link Quality Monitoring */
|
#define PPP_LQM 0xc025 /* Link Quality Monitoring */
|
||||||
#define PPP_CHAP 0xc223 /* Challenge Handshake Authentication Protocol */
|
#define PPP_CHAP 0xc223 /* Challenge Handshake Authentication Protocol */
|
||||||
|
extern struct tok ppptype2str[];
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-arp.c,v 1.43 97/06/15 13:20:27 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-arp.c,v 1.44 1999/11/21 09:36:48 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -19,11 +19,17 @@
|
|||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* Format and print AppleTalk packets.
|
* Format and print AppleTalk packets.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-atalk.c,v 1.48 97/05/28 12:50:58 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-atalk.c,v 1.51 1999/11/21 09:36:48 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -44,7 +50,6 @@ struct rtentry;
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -17,10 +17,16 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-atm.c,v 1.9 97/05/28 12:52:40 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.12 1999/11/21 09:36:48 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -43,7 +49,6 @@ struct rtentry;
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
@ -119,6 +124,12 @@ atm_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
|
|||||||
ip_print(p, length);
|
ip_print(p, length);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
case ETHERTYPE_IPV6:
|
||||||
|
ip6_print(p, length);
|
||||||
|
break;
|
||||||
|
#endif /*INET6*/
|
||||||
|
|
||||||
/*XXX this probably isn't right */
|
/*XXX this probably isn't right */
|
||||||
case ETHERTYPE_ARP:
|
case ETHERTYPE_ARP:
|
||||||
case ETHERTYPE_REVARP:
|
case ETHERTYPE_REVARP:
|
||||||
|
@ -19,10 +19,16 @@
|
|||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* Format and print bootp packets.
|
* Format and print bootp packets.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-bootp.c,v 1.46 98/07/18 13:33:58 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-bootp.c,v 1.48 1999/11/21 09:36:49 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -102,6 +108,8 @@ bootp_print(register const u_char *cp, u_int length,
|
|||||||
printf(" xid:0x%x", (u_int32_t)ntohl(bp->bp_xid));
|
printf(" xid:0x%x", (u_int32_t)ntohl(bp->bp_xid));
|
||||||
if (bp->bp_secs)
|
if (bp->bp_secs)
|
||||||
printf(" secs:%d", ntohs(bp->bp_secs));
|
printf(" secs:%d", ntohs(bp->bp_secs));
|
||||||
|
if (bp->bp_flags)
|
||||||
|
printf(" flags:0x%x", ntohs(bp->bp_flags));
|
||||||
|
|
||||||
/* Client's ip address */
|
/* Client's ip address */
|
||||||
TCHECK(bp->bp_ciaddr);
|
TCHECK(bp->bp_ciaddr);
|
||||||
@ -207,6 +215,63 @@ static struct tok tag2str[] = {
|
|||||||
{ TAG_SWAP_SERVER, "iSS" },
|
{ TAG_SWAP_SERVER, "iSS" },
|
||||||
{ TAG_ROOTPATH, "aRP" },
|
{ TAG_ROOTPATH, "aRP" },
|
||||||
{ TAG_EXTPATH, "aEP" },
|
{ TAG_EXTPATH, "aEP" },
|
||||||
|
/* RFC2132 tags */
|
||||||
|
{ TAG_IP_FORWARD, "BIPF" },
|
||||||
|
{ TAG_NL_SRCRT, "BSRT" },
|
||||||
|
{ TAG_PFILTERS, "pPF" },
|
||||||
|
{ TAG_REASS_SIZE, "sRSZ" },
|
||||||
|
{ TAG_DEF_TTL, "bTTL" },
|
||||||
|
{ TAG_MTU_TIMEOUT, "lMA" },
|
||||||
|
{ TAG_MTU_TABLE, "sMT" },
|
||||||
|
{ TAG_INT_MTU, "sMTU" },
|
||||||
|
{ TAG_LOCAL_SUBNETS, "BLSN" },
|
||||||
|
{ TAG_BROAD_ADDR, "iBR" },
|
||||||
|
{ TAG_DO_MASK_DISC, "BMD" },
|
||||||
|
{ TAG_SUPPLY_MASK, "BMS" },
|
||||||
|
{ TAG_DO_RDISC, "BRD" },
|
||||||
|
{ TAG_RTR_SOL_ADDR, "iRSA" },
|
||||||
|
{ TAG_STATIC_ROUTE, "pSR" },
|
||||||
|
{ TAG_USE_TRAILERS, "BUT" },
|
||||||
|
{ TAG_ARP_TIMEOUT, "lAT" },
|
||||||
|
{ TAG_ETH_ENCAP, "BIE" },
|
||||||
|
{ TAG_TCP_TTL, "bTT" },
|
||||||
|
{ TAG_TCP_KEEPALIVE, "lKI" },
|
||||||
|
{ TAG_KEEPALIVE_GO, "BKG" },
|
||||||
|
{ TAG_NIS_DOMAIN, "aYD" },
|
||||||
|
{ TAG_NIS_SERVERS, "iYS" },
|
||||||
|
{ TAG_NTP_SERVERS, "iNTP" },
|
||||||
|
{ TAG_VENDOR_OPTS, "bVO" },
|
||||||
|
{ TAG_NETBIOS_NS, "iWNS" },
|
||||||
|
{ TAG_NETBIOS_DDS, "iWDD" },
|
||||||
|
{ TAG_NETBIOS_NODE, "bWNT" },
|
||||||
|
{ TAG_NETBIOS_SCOPE, "aWSC" },
|
||||||
|
{ TAG_XWIN_FS, "iXFS" },
|
||||||
|
{ TAG_XWIN_DM, "iXDM" },
|
||||||
|
{ TAG_NIS_P_DOMAIN, "sN+D" },
|
||||||
|
{ TAG_NIS_P_SERVERS, "iN+S" },
|
||||||
|
{ TAG_MOBILE_HOME, "iMH" },
|
||||||
|
{ TAG_SMPT_SERVER, "iSMTP" },
|
||||||
|
{ TAG_POP3_SERVER, "iPOP3" },
|
||||||
|
{ TAG_NNTP_SERVER, "iNNTP" },
|
||||||
|
{ TAG_WWW_SERVER, "iWWW" },
|
||||||
|
{ TAG_FINGER_SERVER, "iFG" },
|
||||||
|
{ TAG_IRC_SERVER, "iIRC" },
|
||||||
|
{ TAG_STREETTALK_SRVR, "iSTS" },
|
||||||
|
{ TAG_STREETTALK_STDA, "iSTDA" },
|
||||||
|
{ TAG_REQUESTED_IP, "iRQ" },
|
||||||
|
{ TAG_IP_LEASE, "lLT" },
|
||||||
|
{ TAG_OPT_OVERLOAD, "bOO" },
|
||||||
|
{ TAG_TFTP_SERVER, "aTFTP" },
|
||||||
|
{ TAG_BOOTFILENAME, "aBF" },
|
||||||
|
{ TAG_DHCP_MESSAGE, " DHCP" },
|
||||||
|
{ TAG_SERVER_ID, "iSID" },
|
||||||
|
{ TAG_PARM_REQUEST, "bPR" },
|
||||||
|
{ TAG_MESSAGE, "aMSG" },
|
||||||
|
{ TAG_MAX_MSG_SIZE, "sMSZ" },
|
||||||
|
{ TAG_RENEWAL_TIME, "lRN" },
|
||||||
|
{ TAG_REBIND_TIME, "lRB" },
|
||||||
|
{ TAG_VENDOR_CLASS, "bVC" },
|
||||||
|
{ TAG_CLIENT_ID, "bCID" },
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -248,6 +313,35 @@ rfc1048_print(register const u_char *bp, register u_int length)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tag == TAG_DHCP_MESSAGE && len == 1) {
|
||||||
|
c = *bp++;
|
||||||
|
switch (c) {
|
||||||
|
case DHCPDISCOVER: printf("DISCOVER"); break;
|
||||||
|
case DHCPOFFER: printf("OFFER"); break;
|
||||||
|
case DHCPREQUEST: printf("REQUEST"); break;
|
||||||
|
case DHCPDECLINE: printf("DECLINE"); break;
|
||||||
|
case DHCPACK: printf("ACK"); break;
|
||||||
|
case DHCPNAK: printf("NACK"); break;
|
||||||
|
case DHCPRELEASE: printf("RELEASE"); break;
|
||||||
|
case DHCPINFORM: printf("INFORM"); break;
|
||||||
|
default: printf("%u", c); break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tag == TAG_PARM_REQUEST) {
|
||||||
|
first = 1;
|
||||||
|
while (len-- > 0) {
|
||||||
|
c = *bp++;
|
||||||
|
cp = tok2str(tag2str, "?%d", c);
|
||||||
|
if (!first)
|
||||||
|
putchar('+');
|
||||||
|
printf("%s", cp + 1);
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Print data */
|
/* Print data */
|
||||||
size = len;
|
size = len;
|
||||||
if (c == '?') {
|
if (c == '?') {
|
||||||
@ -288,6 +382,22 @@ rfc1048_print(register const u_char *bp, register u_int length)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'p':
|
||||||
|
/* IP address pairs */
|
||||||
|
while (size >= 2*sizeof(ul)) {
|
||||||
|
if (!first)
|
||||||
|
putchar(',');
|
||||||
|
memcpy((char *)&ul, (char *)bp, sizeof(ul));
|
||||||
|
printf("(%s:", ipaddr_string(&ul));
|
||||||
|
bp += sizeof(ul);
|
||||||
|
memcpy((char *)&ul, (char *)bp, sizeof(ul));
|
||||||
|
printf("%s)", ipaddr_string(&ul));
|
||||||
|
bp += sizeof(ul);
|
||||||
|
size -= 2*sizeof(ul);
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
/* shorts */
|
/* shorts */
|
||||||
while (size >= sizeof(us)) {
|
while (size >= sizeof(us)) {
|
||||||
@ -301,6 +411,28 @@ rfc1048_print(register const u_char *bp, register u_int length)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'B':
|
||||||
|
/* boolean */
|
||||||
|
while (size > 0) {
|
||||||
|
if (!first)
|
||||||
|
putchar(',');
|
||||||
|
switch (*bp) {
|
||||||
|
case 0:
|
||||||
|
putchar('N');
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
putchar('Y');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("%d?", *bp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++bp;
|
||||||
|
--size;
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
default:
|
default:
|
||||||
/* Bytes */
|
/* Bytes */
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-domain.c,v 1.39 97/06/13 12:56:28 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.42 1999/11/21 09:36:50 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -42,7 +48,6 @@ struct rtentry;
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#ifdef NOERROR
|
#ifdef NOERROR
|
||||||
#undef NOERROR /* Solaris sucks */
|
#undef NOERROR /* Solaris sucks */
|
||||||
@ -53,6 +58,7 @@ struct rtentry;
|
|||||||
#include <arpa/nameser.h>
|
#include <arpa/nameser.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
@ -101,6 +107,27 @@ struct rtentry;
|
|||||||
#ifndef T_LOC
|
#ifndef T_LOC
|
||||||
#define T_LOC 29 /* Location Information */
|
#define T_LOC 29 /* Location Information */
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef T_NXT
|
||||||
|
#define T_NXT 30 /* Next Valid Name in Zone */
|
||||||
|
#endif
|
||||||
|
#ifndef T_EID
|
||||||
|
#define T_EID 31 /* Endpoint identifier */
|
||||||
|
#endif
|
||||||
|
#ifndef T_NIMLOC
|
||||||
|
#define T_NIMLOC 32 /* Nimrod locator */
|
||||||
|
#endif
|
||||||
|
#ifndef T_SRV
|
||||||
|
#define T_SRV 33 /* Server selection */
|
||||||
|
#endif
|
||||||
|
#ifndef T_ATMA
|
||||||
|
#define T_ATMA 34 /* ATM Address */
|
||||||
|
#endif
|
||||||
|
#ifndef T_NAPTR
|
||||||
|
#define T_NAPTR 35 /* Naming Authority PoinTeR */
|
||||||
|
#endif
|
||||||
|
#ifndef T_A6
|
||||||
|
#define T_A6 38 /* IP6 address (ipngwg-dns-lookups) */
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef T_UNSPEC
|
#ifndef T_UNSPEC
|
||||||
#define T_UNSPEC 103 /* Unspecified format (binary data) */
|
#define T_UNSPEC 103 /* Unspecified format (binary data) */
|
||||||
@ -219,7 +246,14 @@ static struct tok type2str[] = {
|
|||||||
{ T_PX, "PX" },
|
{ T_PX, "PX" },
|
||||||
{ T_GPOS, "GPOS" },
|
{ T_GPOS, "GPOS" },
|
||||||
{ T_AAAA, "AAAA" },
|
{ T_AAAA, "AAAA" },
|
||||||
{ T_LOC , "LOC " },
|
{ T_LOC, "LOC " },
|
||||||
|
{ T_NXT, "NXT " },
|
||||||
|
{ T_EID, "EID " },
|
||||||
|
{ T_NIMLOC, "NIMLOC " },
|
||||||
|
{ T_SRV, "SRV " },
|
||||||
|
{ T_ATMA, "ATMA " },
|
||||||
|
{ T_NAPTR, "NAPTR " },
|
||||||
|
{ T_A6, "A6 " },
|
||||||
#ifndef T_UINFO
|
#ifndef T_UINFO
|
||||||
#define T_UINFO 100
|
#define T_UINFO 100
|
||||||
#endif
|
#endif
|
||||||
@ -317,6 +351,9 @@ ns_rprint(register const u_char *cp, register const u_char *bp)
|
|||||||
case T_NS:
|
case T_NS:
|
||||||
case T_CNAME:
|
case T_CNAME:
|
||||||
case T_PTR:
|
case T_PTR:
|
||||||
|
#ifdef T_DNAME
|
||||||
|
case T_DNAME: /*XXX not checked as there's no server support yet*/
|
||||||
|
#endif
|
||||||
putchar(' ');
|
putchar(' ');
|
||||||
(void)ns_nprint(cp, bp);
|
(void)ns_nprint(cp, bp);
|
||||||
break;
|
break;
|
||||||
@ -332,6 +369,25 @@ ns_rprint(register const u_char *cp, register const u_char *bp)
|
|||||||
(void)ns_cprint(cp, bp);
|
(void)ns_cprint(cp, bp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
case T_AAAA:
|
||||||
|
printf(" %s", ip6addr_string(cp));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case T_A6: /*XXX not checked as there's no server support yet*/
|
||||||
|
{
|
||||||
|
struct in6_addr a;
|
||||||
|
int pbyte;
|
||||||
|
|
||||||
|
pbyte = (*cp + 7) / 8;
|
||||||
|
memset(&a, 0, sizeof(a));
|
||||||
|
memcpy(&a, cp + 1, pbyte);
|
||||||
|
printf(" %u %s ", *cp, ip6addr_string(&a));
|
||||||
|
(void)ns_nprint(cp + 1 + pbyte, bp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif /*INET6*/
|
||||||
|
|
||||||
case T_UNSPECA: /* One long string */
|
case T_UNSPECA: /* One long string */
|
||||||
printf(" %.*s", len, cp);
|
printf(" %.*s", len, cp);
|
||||||
break;
|
break;
|
||||||
|
@ -22,7 +22,11 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-ether.c,v 1.44 97/05/26 17:18:13 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.48 1999/11/21 09:36:51 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -43,11 +47,14 @@ struct rtentry;
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
#include <netinet/ip6.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
#include "ethertype.h"
|
#include "ethertype.h"
|
||||||
@ -74,10 +81,12 @@ ether_print(register const u_char *bp, u_int length)
|
|||||||
length);
|
length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u_short extracted_ethertype;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the top level routine of the printer. 'p' is the points
|
* This is the top level routine of the printer. 'p' is the points
|
||||||
* to the ether header of the packet, 'tvp' is the timestamp,
|
* to the ether header of the packet, 'h->tv' is the timestamp,
|
||||||
* 'length' is the length of the packet off the wire, and 'caplen'
|
* 'h->length' is the length of the packet off the wire, and 'h->caplen'
|
||||||
* is the number of bytes actually captured.
|
* is the number of bytes actually captured.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
@ -87,7 +96,6 @@ ether_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
|
|||||||
u_int length = h->len;
|
u_int length = h->len;
|
||||||
struct ether_header *ep;
|
struct ether_header *ep;
|
||||||
u_short ether_type;
|
u_short ether_type;
|
||||||
extern u_short extracted_ethertype;
|
|
||||||
|
|
||||||
ts_print(&h->ts);
|
ts_print(&h->ts);
|
||||||
|
|
||||||
@ -154,19 +162,11 @@ ether_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
|
|||||||
* that might want to know what it is.
|
* that might want to know what it is.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
u_short extracted_ethertype;
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ether_encap_print(u_short ethertype, const u_char *p,
|
ether_encap_print(u_short ethertype, const u_char *p,
|
||||||
u_int length, u_int caplen)
|
u_int length, u_int caplen)
|
||||||
{
|
{
|
||||||
if (ethertype == 0x8100) { /* IEEE 802.1Q vlan tagging encapsulation */
|
recurse:
|
||||||
printf ("[vlan %d] ", ntohs(*(u_short *)p) & 0x17ff);
|
|
||||||
ethertype = ntohs(((u_short *)p)[1]);
|
|
||||||
p += 4;
|
|
||||||
length -= 4;
|
|
||||||
caplen -= 4;
|
|
||||||
}
|
|
||||||
extracted_ethertype = ethertype;
|
extracted_ethertype = ethertype;
|
||||||
|
|
||||||
switch (ethertype) {
|
switch (ethertype) {
|
||||||
@ -175,6 +175,12 @@ ether_encap_print(u_short ethertype, const u_char *p,
|
|||||||
ip_print(p, length);
|
ip_print(p, length);
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
case ETHERTYPE_IPV6:
|
||||||
|
ip6_print(p, length);
|
||||||
|
return (1);
|
||||||
|
#endif /*INET6*/
|
||||||
|
|
||||||
case ETHERTYPE_ARP:
|
case ETHERTYPE_ARP:
|
||||||
case ETHERTYPE_REVARP:
|
case ETHERTYPE_REVARP:
|
||||||
arp_print(p, length, caplen);
|
arp_print(p, length, caplen);
|
||||||
@ -198,11 +204,38 @@ ether_encap_print(u_short ethertype, const u_char *p,
|
|||||||
ipx_print(p, length);
|
ipx_print(p, length);
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
case ETHERTYPE_PPPOE_DISC:
|
case ETHERTYPE_8021Q:
|
||||||
case ETHERTYPE_PPPOE_SESS:
|
printf("802.1Q vlan#%d P%d%s",
|
||||||
pppoe_print(p, length);
|
ntohs(*(unsigned short*)p)&0xFFF,
|
||||||
|
ntohs(*(unsigned short*)p)>>13,
|
||||||
|
(ntohs(*(unsigned short*)p)&0x1000) ? " CFI" : "");
|
||||||
|
ethertype = ntohs(*(unsigned short*)(p+2));
|
||||||
|
p += 4;
|
||||||
|
length -= 4;
|
||||||
|
caplen -= 4;
|
||||||
|
if (ethertype > ETHERMTU)
|
||||||
|
goto recurse;
|
||||||
|
|
||||||
|
extracted_ethertype = 0;
|
||||||
|
|
||||||
|
if (llc_print(p, length, caplen, p-18, p-12) == 0) {
|
||||||
|
/* ether_type not known, print raw packet */
|
||||||
|
if (!eflag)
|
||||||
|
ether_print(p-18, length+4);
|
||||||
|
if (extracted_ethertype) {
|
||||||
|
printf("(LLC %s) ",
|
||||||
|
etherproto_string(htons(extracted_ethertype)));
|
||||||
|
}
|
||||||
|
if (!xflag && !qflag)
|
||||||
|
default_print(p-18, caplen+4);
|
||||||
|
}
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
case ETHERTYPE_PPPOED:
|
||||||
|
case ETHERTYPE_PPPOES:
|
||||||
|
pppoe_print(p, length);
|
||||||
|
return (1);
|
||||||
|
|
||||||
case ETHERTYPE_LAT:
|
case ETHERTYPE_LAT:
|
||||||
case ETHERTYPE_SCA:
|
case ETHERTYPE_SCA:
|
||||||
case ETHERTYPE_MOPRC:
|
case ETHERTYPE_MOPRC:
|
||||||
|
@ -17,14 +17,19 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-fddi.c,v 1.36 97/05/26 17:13:35 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-fddi.c,v 1.40 1999/12/14 16:49:02 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_FDDI
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@ -57,7 +62,7 @@ struct rtentry;
|
|||||||
/*
|
/*
|
||||||
* Some FDDI interfaces use bit-swapped addresses.
|
* Some FDDI interfaces use bit-swapped addresses.
|
||||||
*/
|
*/
|
||||||
#if defined(ultrix) || defined(__alpha) || defined(__bsdi)
|
#if defined(ultrix) || defined(__alpha) || defined(__bsdi) || defined(__NetBSD__)
|
||||||
int fddi_bitswap = 0;
|
int fddi_bitswap = 0;
|
||||||
#else
|
#else
|
||||||
int fddi_bitswap = 1;
|
int fddi_bitswap = 1;
|
||||||
@ -266,8 +271,8 @@ fddi_if_print(u_char *pcap, const struct pcap_pkthdr *h,
|
|||||||
u_int caplen = h->caplen;
|
u_int caplen = h->caplen;
|
||||||
u_int length = h->len;
|
u_int length = h->len;
|
||||||
const struct fddi_header *fddip = (struct fddi_header *)p;
|
const struct fddi_header *fddip = (struct fddi_header *)p;
|
||||||
extern u_short extracted_ethertype;
|
|
||||||
struct ether_header ehdr;
|
struct ether_header ehdr;
|
||||||
|
u_short extracted_ethertype;
|
||||||
|
|
||||||
ts_print(&h->ts);
|
ts_print(&h->ts);
|
||||||
|
|
||||||
@ -335,19 +340,3 @@ fddi_if_print(u_char *pcap, const struct pcap_pkthdr *h,
|
|||||||
out:
|
out:
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "interface.h"
|
|
||||||
void
|
|
||||||
fddi_if_print(u_char *pcap, const struct pcap_pkthdr *h,
|
|
||||||
register const u_char *p)
|
|
||||||
{
|
|
||||||
|
|
||||||
error("not configured for fddi");
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-icmp.c,v 1.38 96/09/26 23:36:44 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-icmp.c,v 1.43 1999/11/22 04:28:21 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -43,7 +49,6 @@ struct rtentry;
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -163,7 +168,7 @@ struct id_rdiscovery {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
icmp_print(register const u_char *bp, register const u_char *bp2)
|
icmp_print(register const u_char *bp, u_int plen, register const u_char *bp2)
|
||||||
{
|
{
|
||||||
register char *cp;
|
register char *cp;
|
||||||
register const struct icmp *dp;
|
register const struct icmp *dp;
|
||||||
@ -178,9 +183,11 @@ icmp_print(register const u_char *bp, register const u_char *bp2)
|
|||||||
ip = (struct ip *)bp2;
|
ip = (struct ip *)bp2;
|
||||||
str = buf;
|
str = buf;
|
||||||
|
|
||||||
|
#if 0
|
||||||
(void)printf("%s > %s: ",
|
(void)printf("%s > %s: ",
|
||||||
ipaddr_string(&ip->ip_src),
|
ipaddr_string(&ip->ip_src),
|
||||||
ipaddr_string(&ip->ip_dst));
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
#endif
|
||||||
|
|
||||||
TCHECK(dp->icmp_code);
|
TCHECK(dp->icmp_code);
|
||||||
switch (dp->icmp_type) {
|
switch (dp->icmp_type) {
|
||||||
@ -348,6 +355,19 @@ icmp_print(register const u_char *bp, register const u_char *bp2)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
(void)printf("icmp: %s", str);
|
(void)printf("icmp: %s", str);
|
||||||
|
if (vflag) {
|
||||||
|
if (TTEST2(*bp, plen)) {
|
||||||
|
if (in_cksum((u_short*)dp, plen, 0))
|
||||||
|
printf(" (wrong icmp csum)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (vflag > 1 && !ICMP_INFOTYPE(dp->icmp_type)) {
|
||||||
|
bp += 8;
|
||||||
|
(void)printf(" for ");
|
||||||
|
ip = (struct ip *)bp;
|
||||||
|
snaplen = snapend - bp;
|
||||||
|
ip_print(bp, ntohs(ip->ip_len));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
trunc:
|
trunc:
|
||||||
fputs("[|icmp]", stdout);
|
fputs("[|icmp]", stdout);
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-ip.c,v 1.66 97/05/28 12:51:43 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.79 1999/12/22 06:27:21 itojun Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -35,7 +41,6 @@ static const char rcsid[] =
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_MALLOC_H
|
#ifdef HAVE_MALLOC_H
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
@ -67,21 +72,11 @@ struct tr_query {
|
|||||||
u_int tr_src; /* traceroute source */
|
u_int tr_src; /* traceroute source */
|
||||||
u_int tr_dst; /* traceroute destination */
|
u_int tr_dst; /* traceroute destination */
|
||||||
u_int tr_raddr; /* traceroute response address */
|
u_int tr_raddr; /* traceroute response address */
|
||||||
#ifdef WORDS_BIGENDIAN
|
u_int tr_rttlqid; /* response ttl and qid */
|
||||||
struct {
|
|
||||||
u_int ttl : 8; /* traceroute response ttl */
|
|
||||||
u_int qid : 24; /* traceroute query id */
|
|
||||||
} q;
|
|
||||||
#else
|
|
||||||
struct {
|
|
||||||
u_int qid : 24; /* traceroute query id */
|
|
||||||
u_int ttl : 8; /* traceroute response ttl */
|
|
||||||
} q;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define tr_rttl q.ttl
|
#define TR_GETTTL(x) (int)(((x) >> 24) & 0xff)
|
||||||
#define tr_qid q.qid
|
#define TR_GETQID(x) ((x) & 0x00ffffff)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Traceroute response format. A traceroute response has a tr_query at the
|
* Traceroute response format. A traceroute response has a tr_query at the
|
||||||
@ -126,22 +121,24 @@ static void print_mtrace(register const u_char *bp, register u_int len)
|
|||||||
{
|
{
|
||||||
register struct tr_query *tr = (struct tr_query *)(bp + 8);
|
register struct tr_query *tr = (struct tr_query *)(bp + 8);
|
||||||
|
|
||||||
printf("mtrace %d: %s to %s reply-to %s", tr->tr_qid,
|
printf("mtrace %lu: %s to %s reply-to %s",
|
||||||
|
(u_long)TR_GETQID(ntohl(tr->tr_rttlqid)),
|
||||||
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
|
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
|
||||||
ipaddr_string(&tr->tr_raddr));
|
ipaddr_string(&tr->tr_raddr));
|
||||||
if (IN_CLASSD(ntohl(tr->tr_raddr)))
|
if (IN_CLASSD(ntohl(tr->tr_raddr)))
|
||||||
printf(" with-ttl %d", tr->tr_rttl);
|
printf(" with-ttl %d", TR_GETTTL(ntohl(tr->tr_rttlqid)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_mresp(register const u_char *bp, register u_int len)
|
static void print_mresp(register const u_char *bp, register u_int len)
|
||||||
{
|
{
|
||||||
register struct tr_query *tr = (struct tr_query *)(bp + 8);
|
register struct tr_query *tr = (struct tr_query *)(bp + 8);
|
||||||
|
|
||||||
printf("mresp %d: %s to %s reply-to %s", tr->tr_qid,
|
printf("mresp %lu: %s to %s reply-to %s",
|
||||||
|
(u_long)TR_GETQID(ntohl(tr->tr_rttlqid)),
|
||||||
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
|
ipaddr_string(&tr->tr_src), ipaddr_string(&tr->tr_dst),
|
||||||
ipaddr_string(&tr->tr_raddr));
|
ipaddr_string(&tr->tr_raddr));
|
||||||
if (IN_CLASSD(ntohl(tr->tr_raddr)))
|
if (IN_CLASSD(ntohl(tr->tr_raddr)))
|
||||||
printf(" with-ttl %d", tr->tr_rttl);
|
printf(" with-ttl %d", TR_GETTTL(ntohl(tr->tr_rttlqid)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -155,13 +152,19 @@ igmp_print(register const u_char *bp, register u_int len,
|
|||||||
ipaddr_string(&ip->ip_src),
|
ipaddr_string(&ip->ip_src),
|
||||||
ipaddr_string(&ip->ip_dst));
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
|
||||||
|
if (qflag) {
|
||||||
|
(void)printf("igmp");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
TCHECK2(bp[0], 8);
|
TCHECK2(bp[0], 8);
|
||||||
switch (bp[0]) {
|
switch (bp[0]) {
|
||||||
case 0x11:
|
case 0x11:
|
||||||
(void)printf("igmp %s query", bp[1] ? "v2" : "v1");
|
(void)printf("igmp %s query", bp[1] ? "v2" : "v1");
|
||||||
if (bp[1] && bp[1] != 100)
|
if (bp[1] && bp[1] != 100)
|
||||||
(void)printf(" [intvl %d]", bp[1]);
|
(void)printf(" [intvl %d]", bp[1]);
|
||||||
if (*(int *)&bp[4])
|
(void)printf("igmp query");
|
||||||
|
if (EXTRACT_32BITS(&bp[4]))
|
||||||
(void)printf(" [gaddr %s]", ipaddr_string(&bp[4]));
|
(void)printf(" [gaddr %s]", ipaddr_string(&bp[4]));
|
||||||
if (len != 8)
|
if (len != 8)
|
||||||
(void)printf(" [len %d]", len);
|
(void)printf(" [len %d]", len);
|
||||||
@ -191,8 +194,8 @@ igmp_print(register const u_char *bp, register u_int len,
|
|||||||
dvmrp_print(bp, len);
|
dvmrp_print(bp, len);
|
||||||
break;
|
break;
|
||||||
case 0x14:
|
case 0x14:
|
||||||
(void)printf("igmp pim");
|
(void)printf("igmp pimv1");
|
||||||
pim_print(bp, len);
|
pimv1_print(bp, len);
|
||||||
break;
|
break;
|
||||||
case 0x1e:
|
case 0x1e:
|
||||||
print_mresp(bp, len);
|
print_mresp(bp, len);
|
||||||
@ -207,21 +210,9 @@ igmp_print(register const u_char *bp, register u_int len,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCHECK2(bp[0], len);
|
if (vflag && TTEST2(bp[0], len)) {
|
||||||
if (vflag) {
|
|
||||||
/* Check the IGMP checksum */
|
/* Check the IGMP checksum */
|
||||||
u_int32_t sum = 0;
|
if (in_cksum((const u_short*)bp, len, 0))
|
||||||
int count;
|
|
||||||
const u_short *sp = (u_short *)bp;
|
|
||||||
|
|
||||||
for (count = len / 2; --count >= 0; )
|
|
||||||
sum += *sp++;
|
|
||||||
if (len & 1)
|
|
||||||
sum += ntohs(*(u_char *) sp << 8);
|
|
||||||
while (sum >> 16)
|
|
||||||
sum = (sum & 0xffff) + (sum >> 16);
|
|
||||||
sum = 0xffff & ~sum;
|
|
||||||
if (sum != 0)
|
|
||||||
printf(" bad igmp cksum %x!", EXTRACT_16BITS(&bp[2]));
|
printf(" bad igmp cksum %x!", EXTRACT_16BITS(&bp[2]));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -254,6 +245,62 @@ ip_printroute(const char *type, register const u_char *cp, u_int length)
|
|||||||
printf("%s}", ptr == len? "#" : "");
|
printf("%s}", ptr == len? "#" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ip_printts(register const u_char *cp, u_int length)
|
||||||
|
{
|
||||||
|
register u_int ptr = cp[2] - 1;
|
||||||
|
register u_int len = 0;
|
||||||
|
int hoplen;
|
||||||
|
char *type;
|
||||||
|
|
||||||
|
printf(" TS{");
|
||||||
|
hoplen = ((cp[3]&0xF) != IPOPT_TS_TSONLY) ? 8 : 4;
|
||||||
|
if ((length - 4) & (hoplen-1))
|
||||||
|
printf("[bad length %d]", length);
|
||||||
|
if (ptr < 4 || ((ptr - 4) & (hoplen-1)) || ptr > length + 1)
|
||||||
|
printf("[bad ptr %d]", cp[2]);
|
||||||
|
switch (cp[3]&0xF) {
|
||||||
|
case IPOPT_TS_TSONLY:
|
||||||
|
printf("TSONLY");
|
||||||
|
break;
|
||||||
|
case IPOPT_TS_TSANDADDR:
|
||||||
|
printf("TS+ADDR");
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
* prespecified should really be 3, but some ones might send 2
|
||||||
|
* instead, and the IPOPT_TS_PRESPEC constant can apparently
|
||||||
|
* have both values, so we have to hard-code it here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
printf("PRESPEC2.0");
|
||||||
|
break;
|
||||||
|
case 3: /* IPOPT_TS_PRESPEC */
|
||||||
|
printf("PRESPEC");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("[bad ts type %d]", cp[3]&0xF);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
type = " ";
|
||||||
|
for (len = 4; len < length; len += hoplen) {
|
||||||
|
if (ptr == len)
|
||||||
|
type = " ^ ";
|
||||||
|
printf("%s%d@%s", type, EXTRACT_32BITS(&cp[len+hoplen-4]),
|
||||||
|
hoplen!=8 ? "" : ipaddr_string(&cp[len]));
|
||||||
|
type = " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
printf("%s", ptr == len ? " ^ " : "");
|
||||||
|
|
||||||
|
if (cp[3]>>4)
|
||||||
|
printf(" [%d hops not recorded]} ", cp[3]>>4);
|
||||||
|
else
|
||||||
|
printf("}");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print IP options.
|
* print IP options.
|
||||||
*/
|
*/
|
||||||
@ -287,15 +334,17 @@ ip_optprint(register const u_char *cp, u_int length)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IPOPT_TS:
|
case IPOPT_TS:
|
||||||
printf(" TS{%d}", len);
|
ip_printts(cp, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifndef IPOPT_SECURITY
|
||||||
|
#define IPOPT_SECURITY 130
|
||||||
|
#endif /* IPOPT_SECURITY */
|
||||||
case IPOPT_SECURITY:
|
case IPOPT_SECURITY:
|
||||||
printf(" SECURITY{%d}", len);
|
printf(" SECURITY{%d}", len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPOPT_RR:
|
case IPOPT_RR:
|
||||||
printf(" RR{%d}=", len);
|
|
||||||
ip_printroute("RR", cp, len);
|
ip_printroute("RR", cp, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -307,11 +356,16 @@ ip_optprint(register const u_char *cp, u_int length)
|
|||||||
ip_printroute("LSRR", cp, len);
|
ip_printroute("LSRR", cp, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifndef IPOPT_RA
|
||||||
|
#define IPOPT_RA 148 /* router alert */
|
||||||
|
#endif
|
||||||
case IPOPT_RA:
|
case IPOPT_RA:
|
||||||
printf(" RA{%d}", len);
|
printf(" RA");
|
||||||
if (cp[2] != 0 || cp[3] != 0)
|
if (len != 4)
|
||||||
printf(" [b23=0x04%x]", cp[2] << 8 | cp[3]);
|
printf("{%d}", len);
|
||||||
break;
|
else if (cp[2] || cp[3])
|
||||||
|
printf("%d.%d", cp[2], cp[3]);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf(" IPOPT-%d{%d}", cp[0], len);
|
printf(" IPOPT-%d{%d}", cp[0], len);
|
||||||
@ -324,23 +378,34 @@ ip_optprint(register const u_char *cp, u_int length)
|
|||||||
* compute an IP header checksum.
|
* compute an IP header checksum.
|
||||||
* don't modifiy the packet.
|
* don't modifiy the packet.
|
||||||
*/
|
*/
|
||||||
static int
|
u_short
|
||||||
in_cksum(const struct ip *ip)
|
in_cksum(const u_short *addr, register int len, u_short csum)
|
||||||
{
|
{
|
||||||
register const u_short *sp = (u_short *)ip;
|
int nleft = len;
|
||||||
register u_int32_t sum = 0;
|
const u_short *w = addr;
|
||||||
register int count;
|
u_short answer;
|
||||||
|
int sum = csum;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Our algorithm is simple, using a 32 bit accumulator (sum),
|
||||||
|
* we add sequential 16 bit words to it, and at the end, fold
|
||||||
|
* back all the carry bits from the top 16 bits into the lower
|
||||||
|
* 16 bits.
|
||||||
|
*/
|
||||||
|
while (nleft > 1) {
|
||||||
|
sum += *w++;
|
||||||
|
nleft -= 2;
|
||||||
|
}
|
||||||
|
if (nleft == 1)
|
||||||
|
sum += htons(*(u_char *)w<<8);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No need for endian conversions.
|
* add back carry outs from top 16 bits to low 16 bits
|
||||||
*/
|
*/
|
||||||
for (count = ip->ip_hl * 2; --count >= 0; )
|
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
|
||||||
sum += *sp++;
|
sum += (sum >> 16); /* add carry */
|
||||||
while (sum > 0xffff)
|
answer = ~sum; /* truncate to 16 bits */
|
||||||
sum = (sum & 0xffff) + (sum >> 16);
|
return (answer);
|
||||||
sum = ~sum & 0xffff;
|
|
||||||
|
|
||||||
return (sum);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -350,8 +415,10 @@ void
|
|||||||
ip_print(register const u_char *bp, register u_int length)
|
ip_print(register const u_char *bp, register u_int length)
|
||||||
{
|
{
|
||||||
register const struct ip *ip;
|
register const struct ip *ip;
|
||||||
register u_int hlen, len, off;
|
register u_int hlen, len, len0, off;
|
||||||
register const u_char *cp;
|
register const u_char *cp;
|
||||||
|
u_char nh;
|
||||||
|
int advance;
|
||||||
|
|
||||||
ip = (const struct ip *)bp;
|
ip = (const struct ip *)bp;
|
||||||
#ifdef LBL_ALIGN
|
#ifdef LBL_ALIGN
|
||||||
@ -395,6 +462,7 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
(void)printf("truncated-ip - %d bytes missing!",
|
(void)printf("truncated-ip - %d bytes missing!",
|
||||||
len - length);
|
len - length);
|
||||||
len -= hlen;
|
len -= hlen;
|
||||||
|
len0 = len;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is fragment zero, hand it to the next higher
|
* If this is fragment zero, hand it to the next higher
|
||||||
@ -403,7 +471,54 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
off = ntohs(ip->ip_off);
|
off = ntohs(ip->ip_off);
|
||||||
if ((off & 0x1fff) == 0) {
|
if ((off & 0x1fff) == 0) {
|
||||||
cp = (const u_char *)ip + hlen;
|
cp = (const u_char *)ip + hlen;
|
||||||
switch (ip->ip_p) {
|
nh = ip->ip_p;
|
||||||
|
|
||||||
|
if (nh != IPPROTO_TCP && nh != IPPROTO_UDP) {
|
||||||
|
(void)printf("%s > %s: ", ipaddr_string(&ip->ip_src),
|
||||||
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
}
|
||||||
|
again:
|
||||||
|
switch (nh) {
|
||||||
|
|
||||||
|
#ifndef IPPROTO_AH
|
||||||
|
#define IPPROTO_AH 51
|
||||||
|
#endif
|
||||||
|
case IPPROTO_AH:
|
||||||
|
nh = *cp;
|
||||||
|
advance = ah_print(cp, (const u_char *)ip);
|
||||||
|
cp += advance;
|
||||||
|
len -= advance;
|
||||||
|
goto again;
|
||||||
|
|
||||||
|
#ifndef IPPROTO_ESP
|
||||||
|
#define IPPROTO_ESP 50
|
||||||
|
#endif
|
||||||
|
case IPPROTO_ESP:
|
||||||
|
{
|
||||||
|
int enh;
|
||||||
|
advance = esp_print(cp, (const u_char *)ip, &enh);
|
||||||
|
cp += advance;
|
||||||
|
len -= advance;
|
||||||
|
if (enh < 0)
|
||||||
|
break;
|
||||||
|
nh = enh & 0xff;
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef IPPROTO_IPCOMP
|
||||||
|
#define IPPROTO_IPCOMP 108
|
||||||
|
#endif
|
||||||
|
case IPPROTO_IPCOMP:
|
||||||
|
{
|
||||||
|
int enh;
|
||||||
|
advance = ipcomp_print(cp, (const u_char *)ip, &enh);
|
||||||
|
cp += advance;
|
||||||
|
len -= advance;
|
||||||
|
if (enh < 0)
|
||||||
|
break;
|
||||||
|
nh = enh & 0xff;
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
||||||
case IPPROTO_TCP:
|
case IPPROTO_TCP:
|
||||||
tcp_print(cp, len, (const u_char *)ip);
|
tcp_print(cp, len, (const u_char *)ip);
|
||||||
@ -414,7 +529,7 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IPPROTO_ICMP:
|
case IPPROTO_ICMP:
|
||||||
icmp_print(cp, (const u_char *)ip);
|
icmp_print(cp, len, (const u_char *)ip);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifndef IPPROTO_IGRP
|
#ifndef IPPROTO_IGRP
|
||||||
@ -425,8 +540,10 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IPPROTO_ND:
|
case IPPROTO_ND:
|
||||||
|
#if 0
|
||||||
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
||||||
ipaddr_string(&ip->ip_dst));
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
#endif
|
||||||
(void)printf(" nd %d", len);
|
(void)printf(" nd %d", len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -450,10 +567,12 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
/* DVMRP multicast tunnel (ip-in-ip encapsulation) */
|
/* DVMRP multicast tunnel (ip-in-ip encapsulation) */
|
||||||
|
#if 0
|
||||||
if (vflag)
|
if (vflag)
|
||||||
(void)printf("%s > %s: ",
|
(void)printf("%s > %s: ",
|
||||||
ipaddr_string(&ip->ip_src),
|
ipaddr_string(&ip->ip_src),
|
||||||
ipaddr_string(&ip->ip_dst));
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
#endif
|
||||||
ip_print(cp, len);
|
ip_print(cp, len);
|
||||||
if (! vflag) {
|
if (! vflag) {
|
||||||
printf(" (ipip)");
|
printf(" (ipip)");
|
||||||
@ -461,6 +580,27 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
#ifndef IP6PROTO_ENCAP
|
||||||
|
#define IP6PROTO_ENCAP 41
|
||||||
|
#endif
|
||||||
|
case IP6PROTO_ENCAP:
|
||||||
|
/* ip6-in-ip encapsulation */
|
||||||
|
#if 0
|
||||||
|
if (vflag)
|
||||||
|
(void)printf("%s > %s: ",
|
||||||
|
ipaddr_string(&ip->ip_src),
|
||||||
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
#endif
|
||||||
|
ip6_print(cp, len);
|
||||||
|
if (! vflag) {
|
||||||
|
printf(" (encap)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif /*INET6*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef IPPROTO_GRE
|
#ifndef IPPROTO_GRE
|
||||||
#define IPPROTO_GRE 47
|
#define IPPROTO_GRE 47
|
||||||
#endif
|
#endif
|
||||||
@ -477,18 +617,49 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifndef IPPROTO_MOBILE
|
||||||
|
#define IPPROTO_MOBILE 55
|
||||||
|
#endif
|
||||||
|
case IPPROTO_MOBILE:
|
||||||
|
if (vflag)
|
||||||
|
(void)printf("mobile %s > %s: ",
|
||||||
|
ipaddr_string(&ip->ip_src),
|
||||||
|
ipaddr_string(&ip->ip_dst));
|
||||||
|
mobile_print(cp, len);
|
||||||
|
if (! vflag) {
|
||||||
|
printf(" (mobile encap)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifndef IPPROTO_PIM
|
||||||
|
#define IPPROTO_PIM 103
|
||||||
|
#endif
|
||||||
|
case IPPROTO_PIM:
|
||||||
|
pim_print(cp, len);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
#if 0
|
||||||
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
||||||
ipaddr_string(&ip->ip_dst));
|
ipaddr_string(&ip->ip_dst));
|
||||||
(void)printf(" ip-proto-%d %d", ip->ip_p, len);
|
#endif
|
||||||
|
(void)printf(" ip-proto-%d %d", nh, len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ultra quiet now means that all this stuff should be suppressed */
|
||||||
|
/* res 3-Nov-98 */
|
||||||
|
if (qflag > 1) return;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* for fragmented datagrams, print id:size@offset. On all
|
* for fragmented datagrams, print id:size@offset. On all
|
||||||
* but the last stick a "+". For unfragmented datagrams, note
|
* but the last stick a "+". For unfragmented datagrams, note
|
||||||
* the don't fragment flag.
|
* the don't fragment flag.
|
||||||
*/
|
*/
|
||||||
|
len = len0; /* get the original length */
|
||||||
if (off & 0x3fff) {
|
if (off & 0x3fff) {
|
||||||
/*
|
/*
|
||||||
* if this isn't the first frag, we're missing the
|
* if this isn't the first frag, we're missing the
|
||||||
@ -497,14 +668,30 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
if (off & 0x1fff)
|
if (off & 0x1fff)
|
||||||
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
|
||||||
ipaddr_string(&ip->ip_dst));
|
ipaddr_string(&ip->ip_dst));
|
||||||
(void)printf(" (frag %d:%d@%d%s)", ntohs(ip->ip_id), len,
|
#ifndef IP_MF
|
||||||
|
#define IP_MF 0x2000
|
||||||
|
#endif /* IP_MF */
|
||||||
|
#ifndef IP_DF
|
||||||
|
#define IP_DF 0x4000
|
||||||
|
#endif /* IP_DF */
|
||||||
|
(void)printf(" (frag %d:%u@%d%s)", ntohs(ip->ip_id), len,
|
||||||
(off & 0x1fff) * 8,
|
(off & 0x1fff) * 8,
|
||||||
(off & IP_MF)? "+" : "");
|
(off & IP_MF)? "+" : "");
|
||||||
|
|
||||||
} else if (off & IP_DF)
|
} else if (off & IP_DF)
|
||||||
(void)printf(" (DF)");
|
(void)printf(" (DF)");
|
||||||
|
|
||||||
if (ip->ip_tos)
|
if (ip->ip_tos) {
|
||||||
(void)printf(" [tos 0x%x]", (int)ip->ip_tos);
|
(void)printf(" [tos 0x%x", (int)ip->ip_tos);
|
||||||
|
/* ECN bits */
|
||||||
|
if (ip->ip_tos&0x02) {
|
||||||
|
(void)printf(",ECT");
|
||||||
|
if (ip->ip_tos&0x01)
|
||||||
|
(void)printf(",CE");
|
||||||
|
}
|
||||||
|
(void)printf("] ");
|
||||||
|
}
|
||||||
|
|
||||||
if (ip->ip_ttl <= 1)
|
if (ip->ip_ttl <= 1)
|
||||||
(void)printf(" [ttl %d]", (int)ip->ip_ttl);
|
(void)printf(" [ttl %d]", (int)ip->ip_ttl);
|
||||||
|
|
||||||
@ -522,7 +709,7 @@ ip_print(register const u_char *bp, register u_int length)
|
|||||||
sep = ", ";
|
sep = ", ";
|
||||||
}
|
}
|
||||||
if ((u_char *)ip + hlen <= snapend) {
|
if ((u_char *)ip + hlen <= snapend) {
|
||||||
sum = in_cksum(ip);
|
sum = in_cksum((const u_short *)ip, hlen, 0);
|
||||||
if (sum != 0) {
|
if (sum != 0) {
|
||||||
(void)printf("%sbad cksum %x!", sep,
|
(void)printf("%sbad cksum %x!", sep,
|
||||||
ntohs(ip->ip_sum));
|
ntohs(ip->ip_sum));
|
||||||
|
@ -20,11 +20,17 @@
|
|||||||
*
|
*
|
||||||
* Format and print Novell IPX packets.
|
* Format and print Novell IPX packets.
|
||||||
* Contributed by Brad Parker (brad@fcr.com).
|
* Contributed by Brad Parker (brad@fcr.com).
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-ipx.c,v 1.19 96/12/10 23:23:52 leres Exp $";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-ipx.c,v 1.22 1999/11/21 09:36:54 fenner Exp $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -38,7 +44,6 @@ static const char rcsid[] =
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -19,11 +19,17 @@
|
|||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* Original code by Matt Thomas, Digital Equipment Corporation
|
* Original code by Matt Thomas, Digital Equipment Corporation
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-isoclns.c,v 1.15 96/12/31 21:27:41 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-isoclns.c,v 1.16 1999/11/21 09:36:55 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -20,11 +20,17 @@
|
|||||||
*
|
*
|
||||||
* Code by Matt Thomas, Digital Equipment Corporation
|
* Code by Matt Thomas, Digital Equipment Corporation
|
||||||
* with an awful lot of hacking by Jeffrey Mogul, DECWRL
|
* with an awful lot of hacking by Jeffrey Mogul, DECWRL
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-llc.c,v 1.24 97/01/01 20:56:48 leres Exp $";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.27 1999/12/22 06:27:21 itojun Exp $";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -79,10 +85,15 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
|||||||
ipx_print(p, length);
|
ipx_print(p, length);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
#ifdef notyet
|
if (llc.ssap == 0xf0 && llc.dsap == 0xf0) {
|
||||||
else if (p[0] == 0xf0 && p[1] == 0xf0)
|
/*
|
||||||
netbios_print(p, length);
|
* we don't actually have a full netbeui parser yet, but the
|
||||||
#endif
|
* smb parser can handle many smb-in-netbeui packets, which
|
||||||
|
* is very useful, so we call that
|
||||||
|
*/
|
||||||
|
netbeui_print(p + 2, p + min(caplen, length));
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
if (llc.ssap == LLCSAP_ISONS && llc.dsap == LLCSAP_ISONS
|
if (llc.ssap == LLCSAP_ISONS && llc.dsap == LLCSAP_ISONS
|
||||||
&& llc.llcui == LLC_UI) {
|
&& llc.llcui == LLC_UI) {
|
||||||
isoclns_print(p + 3, length - 3, caplen - 3, esrc, edst);
|
isoclns_print(p + 3, length - 3, caplen - 3, esrc, edst);
|
||||||
@ -92,9 +103,9 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
|||||||
if (llc.ssap == LLCSAP_SNAP && llc.dsap == LLCSAP_SNAP
|
if (llc.ssap == LLCSAP_SNAP && llc.dsap == LLCSAP_SNAP
|
||||||
&& llc.llcui == LLC_UI) {
|
&& llc.llcui == LLC_UI) {
|
||||||
if (caplen < sizeof(llc)) {
|
if (caplen < sizeof(llc)) {
|
||||||
(void)printf("[|llc-snap]");
|
(void)printf("[|llc-snap]");
|
||||||
default_print((u_char *)p, caplen);
|
default_print((u_char *)p, caplen);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
if (vflag)
|
if (vflag)
|
||||||
(void)printf("snap %s ", protoid_string(llc.llcpi));
|
(void)printf("snap %s ", protoid_string(llc.llcpi));
|
||||||
@ -136,11 +147,11 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
|||||||
char f;
|
char f;
|
||||||
m = tok2str(cmd2str, "%02x", LLC_U_CMD(llc.llcu));
|
m = tok2str(cmd2str, "%02x", LLC_U_CMD(llc.llcu));
|
||||||
switch ((llc.ssap & LLC_GSAP) | (llc.llcu & LLC_U_POLL)) {
|
switch ((llc.ssap & LLC_GSAP) | (llc.llcu & LLC_U_POLL)) {
|
||||||
case 0: f = 'C'; break;
|
case 0: f = 'C'; break;
|
||||||
case LLC_GSAP: f = 'R'; break;
|
case LLC_GSAP: f = 'R'; break;
|
||||||
case LLC_U_POLL: f = 'P'; break;
|
case LLC_U_POLL: f = 'P'; break;
|
||||||
case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
|
case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
|
||||||
default: f = '?'; break;
|
default: f = '?'; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%s/%c", m, f);
|
printf("%s/%c", m, f);
|
||||||
@ -150,22 +161,31 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
|||||||
caplen -= 3;
|
caplen -= 3;
|
||||||
|
|
||||||
if ((llc.llcu & ~LLC_U_POLL) == LLC_XID) {
|
if ((llc.llcu & ~LLC_U_POLL) == LLC_XID) {
|
||||||
if (*p == LLC_XID_FI) {
|
if (*p == LLC_XID_FI) {
|
||||||
printf(": %02x %02x", p[1], p[2]);
|
printf(": %02x %02x", p[1], p[2]);
|
||||||
p += 3;
|
p += 3;
|
||||||
length -= 3;
|
length -= 3;
|
||||||
caplen -= 3;
|
caplen -= 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(m,"ui") && f=='C') {
|
||||||
|
/*
|
||||||
|
* we don't have a proper ipx decoder yet, but there
|
||||||
|
* is a partial one in the smb code
|
||||||
|
*/
|
||||||
|
ipx_netbios_print(p,p+min(caplen,length));
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
char f;
|
char f;
|
||||||
llc.llcis = ntohs(llc.llcis);
|
llc.llcis = ntohs(llc.llcis);
|
||||||
switch ((llc.ssap & LLC_GSAP) | (llc.llcu & LLC_U_POLL)) {
|
switch ((llc.ssap & LLC_GSAP) | (llc.llcu & LLC_U_POLL)) {
|
||||||
case 0: f = 'C'; break;
|
case 0: f = 'C'; break;
|
||||||
case LLC_GSAP: f = 'R'; break;
|
case LLC_GSAP: f = 'R'; break;
|
||||||
case LLC_U_POLL: f = 'P'; break;
|
case LLC_U_POLL: f = 'P'; break;
|
||||||
case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
|
case LLC_GSAP|LLC_U_POLL: f = 'F'; break;
|
||||||
default: f = '?'; break;
|
default: f = '?'; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((llc.llcu & LLC_S_FMT) == LLC_S_FMT) {
|
if ((llc.llcu & LLC_S_FMT) == LLC_S_FMT) {
|
||||||
|
@ -21,11 +21,17 @@
|
|||||||
* Format and print ntp packets.
|
* Format and print ntp packets.
|
||||||
* By Jeffrey Mogul/DECWRL
|
* By Jeffrey Mogul/DECWRL
|
||||||
* loosely based on print-bootp.c
|
* loosely based on print-bootp.c
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-ntp.c,v 1.26 97/06/13 12:56:37 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-ntp.c,v 1.27 1999/11/21 09:36:57 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-null.c,v 1.24 97/05/28 12:52:47 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-null.c,v 1.30 1999/12/22 06:27:21 itojun Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -44,12 +50,15 @@ struct rtentry;
|
|||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
#include <netinet/udp_var.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
#include <netinet/ip6.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
|
|
||||||
@ -80,6 +89,12 @@ null_print(const u_char *p, const struct ip *ip, u_int length)
|
|||||||
printf("ip: ");
|
printf("ip: ");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
case AF_INET6:
|
||||||
|
printf("ip6: ");
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case AF_NS:
|
case AF_NS:
|
||||||
printf("ns: ");
|
printf("ns: ");
|
||||||
break;
|
break;
|
||||||
@ -114,7 +129,19 @@ null_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
|
|||||||
if (eflag)
|
if (eflag)
|
||||||
null_print(p, ip, length);
|
null_print(p, ip, length);
|
||||||
|
|
||||||
ip_print((const u_char *)ip, length);
|
switch (ip->ip_v) {
|
||||||
|
case 4:
|
||||||
|
ip_print((const u_char *)ip, length);
|
||||||
|
break;
|
||||||
|
#ifdef INET6
|
||||||
|
case 6:
|
||||||
|
ip6_print((const u_char *)ip, length);
|
||||||
|
break;
|
||||||
|
#endif /* INET6 */
|
||||||
|
default:
|
||||||
|
printf("ip v%d", ip->ip_v);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (xflag)
|
if (xflag)
|
||||||
default_print((const u_char *)ip, caplen - NULL_HDRLEN);
|
default_print((const u_char *)ip, caplen - NULL_HDRLEN);
|
||||||
|
@ -23,7 +23,11 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-ppp.c,v 1.26 97/06/12 14:21:29 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.33.2.1 2000/01/29 07:31:17 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -41,17 +45,23 @@ struct rtentry;
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netinet/in_systm.h>
|
#include <netinet/in_systm.h>
|
||||||
#include <netinet/ip.h>
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/if_ether.h>
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <pcap.h>
|
#include <pcap.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#ifdef __bsdi__
|
||||||
|
#include <net/slcompress.h>
|
||||||
|
#include <net/if_ppp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <net/ethernet.h>
|
#include <net/ethernet.h>
|
||||||
#include "ethertype.h"
|
#include "ethertype.h"
|
||||||
|
|
||||||
#include <net/ppp_defs.h>
|
#include <net/ppp_defs.h>
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
|
#include "extract.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
#include "ppp.h"
|
#include "ppp.h"
|
||||||
|
|
||||||
@ -191,54 +201,13 @@ static char *papcode[] = {
|
|||||||
#define IPCP_CP 2
|
#define IPCP_CP 2
|
||||||
#define IPCP_ADDR 3
|
#define IPCP_ADDR 3
|
||||||
|
|
||||||
/* PPPoE */
|
static void do_ppp_print __P((const u_char *, u_int, u_int));
|
||||||
|
static void handle_lcp __P((const u_char *p, int length));
|
||||||
|
static int print_lcp_config_options __P((const u_char *p));
|
||||||
|
static void handle_chap __P((const u_char *p, int length));
|
||||||
|
static void handle_ipcp __P((const u_char *p, int length));
|
||||||
|
static void handle_pap __P((const u_char *p, int length));
|
||||||
|
|
||||||
struct typenames {
|
|
||||||
u_short type;
|
|
||||||
char *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct typenames typenames[] = {
|
|
||||||
/*
|
|
||||||
* PPPoE type field values
|
|
||||||
*/
|
|
||||||
0x00, "DATA", /* PPPoE Data packet */
|
|
||||||
0x09, "PADI", /* Active Discovery Initiation */
|
|
||||||
0x07, "PADO", /* Active Discovery Offer */
|
|
||||||
0x19, "PADR", /* Active Discovery Request */
|
|
||||||
0x65, "PADS", /* Active Discovery Session-Confirm */
|
|
||||||
0xa7, "PADT", /* Active Discovery Terminate */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct tagnames {
|
|
||||||
u_short tag;
|
|
||||||
char *name;
|
|
||||||
int isascii;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct tagnames tagnames[] = {
|
|
||||||
/*
|
|
||||||
* PPPoE tag field values
|
|
||||||
*/
|
|
||||||
0x0000, "End-Of-List", 0, /* Optional last tag (len 0) */
|
|
||||||
0x0101, "Service-Name", 1, /* The (ascii) service */
|
|
||||||
0x0102, "AC-Name", -1, /* Access Concentrator */
|
|
||||||
0x0103, "Host-Uniq", 0, /* Associate PAD[OS] with PAD[IR] */
|
|
||||||
0x0104, "AC-Cookie", 0, /* Optional at PADO time */
|
|
||||||
0x0105, "Vendor-Specific", 0, /* First 4 bytes special (ignore) */
|
|
||||||
0x0110, "Relay-Session-Id", 0, /* Max 12 octets, added by gateway */
|
|
||||||
0x0201, "Service-Name-Error", -1, /* Request not honoured */
|
|
||||||
0x0203, "Generic-Error", 1 /* Access Concentrator error */
|
|
||||||
};
|
|
||||||
|
|
||||||
static int handle_lcp(const u_char *p, int length);
|
|
||||||
static int print_lcp_config_options(u_char *p);
|
|
||||||
static int handle_chap(const u_char *p, int length);
|
|
||||||
static int handle_ipcp(const u_char *p, int length);
|
|
||||||
static int handle_pap(const u_char *p, int length);
|
|
||||||
static void do_ppp_print(const u_char *p, u_int length, u_int caplen);
|
|
||||||
|
|
||||||
/* Standard PPP printer */
|
|
||||||
void
|
void
|
||||||
ppp_hdlc_print(const u_char *p, int length)
|
ppp_hdlc_print(const u_char *p, int length)
|
||||||
{
|
{
|
||||||
@ -247,7 +216,7 @@ ppp_hdlc_print(const u_char *p, int length)
|
|||||||
u_char *ptr;
|
u_char *ptr;
|
||||||
|
|
||||||
printf("ID-%03d ", *(p+5));
|
printf("ID-%03d ", *(p+5));
|
||||||
|
|
||||||
for (i = (sizeof(protonames) / sizeof(protonames[0])) - 1; i >= 0; --i)
|
for (i = (sizeof(protonames) / sizeof(protonames[0])) - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
if (proto == protonames[i].protocol)
|
if (proto == protonames[i].protocol)
|
||||||
@ -279,257 +248,235 @@ ppp_hdlc_print(const u_char *p, int length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* print LCP frame */
|
/* print LCP frame */
|
||||||
|
static void
|
||||||
static int
|
|
||||||
handle_lcp(const u_char *p, int length)
|
handle_lcp(const u_char *p, int length)
|
||||||
{
|
{
|
||||||
int x, j;
|
int x, j;
|
||||||
u_char *ptr;
|
const u_char *ptr;
|
||||||
|
|
||||||
x = *(p+4);
|
x = p[4];
|
||||||
|
|
||||||
if((x >= LCP_MIN) && (x <= LCP_MAX))
|
if ((x >= LCP_MIN) && (x <= LCP_MAX))
|
||||||
{
|
printf("%s", lcpcodes[x - 1]);
|
||||||
printf("%s", lcpcodes[x-1]);
|
else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("0x%02x", x);
|
printf("0x%02x", x);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
length -= 4;
|
length -= 4;
|
||||||
|
|
||||||
switch(x)
|
switch (x) {
|
||||||
{
|
case LCP_CONF_REQ:
|
||||||
case LCP_CONF_REQ:
|
case LCP_CONF_ACK:
|
||||||
case LCP_CONF_ACK:
|
case LCP_CONF_NAK:
|
||||||
case LCP_CONF_NAK:
|
case LCP_CONF_REJ:
|
||||||
case LCP_CONF_REJ:
|
x = length;
|
||||||
x = length;
|
ptr = p + 8;
|
||||||
ptr = (u_char *)p+8;
|
do {
|
||||||
do
|
if ((j = print_lcp_config_options(ptr)) == 0)
|
||||||
{
|
break;
|
||||||
if((j = print_lcp_config_options(ptr)) == 0)
|
x -= j;
|
||||||
break;
|
ptr += j;
|
||||||
x -= j;
|
} while (x > 0);
|
||||||
ptr += j;
|
break;
|
||||||
}
|
|
||||||
while(x > 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LCP_ECHO_REQ:
|
case LCP_ECHO_REQ:
|
||||||
case LCP_ECHO_RPL:
|
case LCP_ECHO_RPL:
|
||||||
printf(", Magic-Number=%d", ((*(p+8) << 24) + (*(p+9) << 16) + (*(p+10) << 8) + (*(p+11))));
|
printf(", Magic-Number=%u",
|
||||||
break;
|
EXTRACT_32BITS(p+8));
|
||||||
case LCP_TERM_REQ:
|
break;
|
||||||
case LCP_TERM_ACK:
|
case LCP_TERM_REQ:
|
||||||
case LCP_CODE_REJ:
|
case LCP_TERM_ACK:
|
||||||
case LCP_PROT_REJ:
|
case LCP_CODE_REJ:
|
||||||
case LCP_DISC_REQ:
|
case LCP_PROT_REJ:
|
||||||
default:
|
case LCP_DISC_REQ:
|
||||||
break;
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* LCP config options */
|
/* LCP config options */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
print_lcp_config_options(u_char *p)
|
print_lcp_config_options(const u_char *p)
|
||||||
{
|
{
|
||||||
int len = *(p+1);
|
int len = p[1];
|
||||||
int opt = *p;
|
int opt = p[0];
|
||||||
|
|
||||||
if((opt >= LCPOPT_MIN) && (opt <= LCPOPT_MAX))
|
if ((opt >= LCPOPT_MIN) && (opt <= LCPOPT_MAX))
|
||||||
printf(", %s", lcpconfopts[opt]);
|
printf(", %s", lcpconfopts[opt]);
|
||||||
|
|
||||||
switch(opt)
|
switch (opt) {
|
||||||
{
|
case LCPOPT_MRU:
|
||||||
case LCPOPT_MRU:
|
if (len == 4)
|
||||||
if(len == 4)
|
printf("=%d", (*(p+2) << 8) + *(p+3));
|
||||||
printf("=%d", (*(p+2) << 8) + *(p+3));
|
break;
|
||||||
break;
|
case LCPOPT_AP:
|
||||||
case LCPOPT_AP:
|
if (len >= 4) {
|
||||||
if(len >= 4)
|
if (p[2] == 0xc0 && p[3] == 0x23)
|
||||||
{
|
printf(" PAP");
|
||||||
if(*(p+2) == 0xc0 && *(p+3) == 0x23)
|
else if (p[2] == 0xc2 && p[3] == 0x23) {
|
||||||
{
|
printf(" CHAP/");
|
||||||
printf(" PAP");
|
switch (p[4]) {
|
||||||
}
|
default:
|
||||||
else if(*(p+2) == 0xc2 && *(p+3) == 0x23)
|
printf("unknown-algorithm-%u", p[4]);
|
||||||
{
|
break;
|
||||||
printf(" CHAP/");
|
case 5:
|
||||||
switch(*(p+4))
|
printf("MD5");
|
||||||
{
|
break;
|
||||||
default:
|
case 0x80:
|
||||||
printf("unknown-algorithm-%d", *(p+4));
|
printf("Microsoft");
|
||||||
break;
|
break;
|
||||||
case 5:
|
|
||||||
printf("MD5");
|
|
||||||
break;
|
|
||||||
case 0x80:
|
|
||||||
printf("Microsoft");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(*(p+2) == 0xc2 && *(p+3) == 0x27)
|
|
||||||
{
|
|
||||||
printf(" EAP");
|
|
||||||
}
|
|
||||||
else if(*(p+2) == 0xc0 && *(p+3) == 0x27)
|
|
||||||
{
|
|
||||||
printf(" SPAP");
|
|
||||||
}
|
|
||||||
else if(*(p+2) == 0xc1 && *(p+3) == 0x23)
|
|
||||||
{
|
|
||||||
printf(" Old-SPAP");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("unknown");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
else if (p[2] == 0xc2 && p[3] == 0x27)
|
||||||
case LCPOPT_QP:
|
printf(" EAP");
|
||||||
if(len >= 4)
|
else if (p[2] == 0xc0 && p[3] == 0x27)
|
||||||
{
|
printf(" SPAP");
|
||||||
if(*(p+2) == 0xc0 && *(p+3) == 0x25)
|
else if (p[2] == 0xc1 && p[3] == 0x23)
|
||||||
printf(" LQR");
|
printf(" Old-SPAP");
|
||||||
else
|
else
|
||||||
printf(" unknown");
|
printf("unknown");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LCPOPT_MN:
|
case LCPOPT_QP:
|
||||||
if(len == 6)
|
if (len >= 4) {
|
||||||
{
|
if (p[2] == 0xc0 && p[3] == 0x25)
|
||||||
printf("=%d", ((*(p+2) << 24) + (*(p+3) << 16) + (*(p+4) << 8) + (*(p+5))));
|
printf(" LQR");
|
||||||
}
|
else
|
||||||
break;
|
printf(" unknown");
|
||||||
case LCPOPT_PFC:
|
}
|
||||||
printf(" PFC");
|
break;
|
||||||
break;
|
case LCPOPT_MN:
|
||||||
case LCPOPT_ACFC:
|
if (len == 6)
|
||||||
printf(" ACFC");
|
printf("=%u", EXTRACT_32BITS(p+2));
|
||||||
break;
|
break;
|
||||||
|
case LCPOPT_PFC:
|
||||||
|
printf(" PFC");
|
||||||
|
break;
|
||||||
|
case LCPOPT_ACFC:
|
||||||
|
printf(" ACFC");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return(len);
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CHAP */
|
/* CHAP */
|
||||||
|
static void
|
||||||
static int
|
|
||||||
handle_chap(const u_char *p, int length)
|
handle_chap(const u_char *p, int length)
|
||||||
{
|
{
|
||||||
int x, j;
|
int x;
|
||||||
u_char *ptr;
|
const u_char *ptr;
|
||||||
|
|
||||||
x = *(p+4);
|
x = p[4];
|
||||||
|
|
||||||
if((x >= CHAP_CODEMIN) && (x <= CHAP_CODEMAX))
|
if ((x >= CHAP_CODEMIN) && (x <= CHAP_CODEMAX))
|
||||||
{
|
printf("%s", chapcode[x - 1]);
|
||||||
printf("%s", chapcode[x-1]);
|
else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("0x%02x", x);
|
printf("0x%02x", x);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
length -= 4;
|
length -= 4;
|
||||||
|
|
||||||
switch(x)
|
switch (p[4]) {
|
||||||
{
|
case CHAP_CHAL:
|
||||||
case CHAP_CHAL:
|
case CHAP_RESP:
|
||||||
case CHAP_RESP:
|
printf(", Value=");
|
||||||
printf(", Value=");
|
x = p[8]; /* value size */
|
||||||
x = *(p+8); /* value size */
|
ptr = p + 9;
|
||||||
ptr = (u_char *)p+9;
|
while (--x >= 0)
|
||||||
while(--x >= 0)
|
printf("%02x", *ptr++);
|
||||||
printf("%02x", *ptr++);
|
x = length - p[8] - 1;
|
||||||
x = length - *(p+8) - 1;
|
printf(", Name=");
|
||||||
printf(", Name=");
|
while (--x >= 0) {
|
||||||
while(--x >= 0)
|
if (isprint(*ptr))
|
||||||
printf("%c", *ptr++);
|
printf("%c", *ptr);
|
||||||
break;
|
else
|
||||||
|
printf("\\%03o", *ptr);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PAP */
|
/* PAP */
|
||||||
|
static void
|
||||||
static int
|
|
||||||
handle_pap(const u_char *p, int length)
|
handle_pap(const u_char *p, int length)
|
||||||
{
|
{
|
||||||
int x, j;
|
int x;
|
||||||
u_char *ptr;
|
const u_char *ptr;
|
||||||
|
|
||||||
x = *(p+4);
|
x = p[4];
|
||||||
|
|
||||||
if((x >= PAP_CODEMIN) && (x <= PAP_CODEMAX))
|
if ((x >= PAP_CODEMIN) && (x <= PAP_CODEMAX))
|
||||||
{
|
printf("%s", papcode[x - 1]);
|
||||||
printf("%s", papcode[x-1]);
|
else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("0x%02x", x);
|
printf("0x%02x", x);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
length -= 4;
|
length -= 4;
|
||||||
|
|
||||||
switch(x)
|
switch (x) {
|
||||||
{
|
case PAP_AREQ:
|
||||||
case PAP_AREQ:
|
printf(", Peer-Id=");
|
||||||
printf(", Peer-Id=");
|
x = p[8]; /* peerid size */
|
||||||
x = *(p+8); /* peerid size */
|
ptr = p + 9;
|
||||||
ptr = (u_char *)p+9;
|
while (--x >= 0) {
|
||||||
while(--x >= 0)
|
if (isprint(*ptr))
|
||||||
printf("%c", *ptr++);
|
printf("%c", *ptr);
|
||||||
x = *ptr++;
|
else
|
||||||
printf(", Passwd=");
|
printf("\\%03o", *ptr);
|
||||||
while(--x >= 0)
|
ptr++;
|
||||||
printf("%c", *ptr++);
|
}
|
||||||
break;
|
x = *ptr++;
|
||||||
case PAP_AACK:
|
printf(", Passwd=");
|
||||||
case PAP_ANAK:
|
while (--x >= 0) {
|
||||||
break;
|
if (isprint(*ptr))
|
||||||
|
printf("%c", *ptr);
|
||||||
|
else
|
||||||
|
printf("\\%03o", *ptr);
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PAP_AACK:
|
||||||
|
case PAP_ANAK:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IPCP */
|
/* IPCP */
|
||||||
|
static void
|
||||||
static int
|
|
||||||
handle_ipcp(const u_char *p, int length)
|
handle_ipcp(const u_char *p, int length)
|
||||||
{
|
{
|
||||||
int x, j;
|
|
||||||
|
|
||||||
x = *(p+8);
|
|
||||||
|
|
||||||
length -= 4;
|
length -= 4;
|
||||||
|
|
||||||
switch(x)
|
switch (p[8]) {
|
||||||
{
|
case IPCP_2ADDR:
|
||||||
case IPCP_2ADDR:
|
printf("IP-Addresses");
|
||||||
printf("IP-Addresses");
|
printf(", src=%s", ipaddr_string(p + 10));
|
||||||
printf(", Src=%d.%d.%d.%d", *(p+10), *(p+11), *(p+12), *(p+13));
|
printf(", drc=%s", ipaddr_string(p + 14));
|
||||||
printf(", Dst=%d.%d.%d.%d", *(p+14), *(p+15), *(p+16), *(p+17));
|
break;
|
||||||
break;
|
|
||||||
|
case IPCP_CP:
|
||||||
case IPCP_CP:
|
printf("IP-Compression-Protocol");
|
||||||
printf("IP-Compression-Protocol");
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case IPCP_ADDR:
|
case IPCP_ADDR:
|
||||||
printf("IP-Address=%d.%d.%d.%d", *(p+10), *(p+11), *(p+12), *(p+13));
|
printf("IP-Address=%s", ipaddr_string(p + 10));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Standard PPP printer */
|
||||||
void
|
void
|
||||||
ppp_if_print(u_char *user, const struct pcap_pkthdr *h,
|
ppp_if_print(u_char *user, const struct pcap_pkthdr *h,
|
||||||
register const u_char *p)
|
register const u_char *p)
|
||||||
{
|
{
|
||||||
register u_int length = h->len;
|
register u_int length = h->len;
|
||||||
register u_int caplen = h->caplen;
|
register u_int caplen = h->caplen;
|
||||||
|
const struct ip *ip;
|
||||||
|
u_int proto;
|
||||||
|
|
||||||
ts_print(&h->ts);
|
ts_print(&h->ts);
|
||||||
|
|
||||||
@ -543,113 +490,13 @@ ppp_if_print(u_char *user, const struct pcap_pkthdr *h,
|
|||||||
* and/or check that they're not walking off the end of the packet.
|
* and/or check that they're not walking off the end of the packet.
|
||||||
* Rather than pass them all the way down, we set these globals.
|
* Rather than pass them all the way down, we set these globals.
|
||||||
*/
|
*/
|
||||||
|
proto = ntohs(*(u_short *)&p[2]);
|
||||||
packetp = p;
|
packetp = p;
|
||||||
snapend = p + caplen;
|
snapend = p + caplen;
|
||||||
|
|
||||||
do_ppp_print(p, length, caplen);
|
do_ppp_print(p, length, caplen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Print PPPoE discovery & session packets
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
pppoe_print(const u_char *p, u_int length)
|
|
||||||
{
|
|
||||||
u_short tag, len, tlen;
|
|
||||||
u_char type;
|
|
||||||
int f, asc;
|
|
||||||
|
|
||||||
fputs("PPPoE ", stdout);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A PPPoE header:
|
|
||||||
*
|
|
||||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | VER | TYPE | CODE | SESSION_ID |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | LENGTH | payload ~
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
*/
|
|
||||||
|
|
||||||
type = p[1];
|
|
||||||
for (f = sizeof typenames / sizeof typenames[0] - 1; f >= 0; f--)
|
|
||||||
if (typenames[f].type == type) {
|
|
||||||
fputs(typenames[f].name, stdout);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f == -1) {
|
|
||||||
printf("<0x%02x>\n", type);
|
|
||||||
}
|
|
||||||
|
|
||||||
len = ntohs(*(u_short *)(p + 4));
|
|
||||||
printf(" v%d, type %d, sess %d len %d", p[0] >> 4, p[0] & 0xf,
|
|
||||||
ntohs(*(u_short *)(p + 2)), len);
|
|
||||||
|
|
||||||
if (type == 0x00) {
|
|
||||||
/* This is a data packet */
|
|
||||||
p += 4;
|
|
||||||
fputs("] ", stdout);
|
|
||||||
/* If eflag is set, ignore the trailing 2 bytes for LCP... */
|
|
||||||
do_ppp_print(p, eflag ? len - 2 : len + 2, len + 4);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
p += 6;
|
|
||||||
length -= 6;
|
|
||||||
if (len > length)
|
|
||||||
len = length; /* puke ! */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A PPPoE tag:
|
|
||||||
*
|
|
||||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | TAG_TYPE | TAG_LENGTH |
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
* | TAG_VALUE ... ~
|
|
||||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
*/
|
|
||||||
|
|
||||||
while (len >= 4) {
|
|
||||||
tag = ntohs(*(u_short *)p);
|
|
||||||
tlen = ntohs(*(u_short *)(p + 2));
|
|
||||||
|
|
||||||
fputs(" [", stdout);
|
|
||||||
for (f = sizeof tagnames / sizeof tagnames[0] - 1; f >= 0; f--)
|
|
||||||
if (tagnames[f].tag == tag) {
|
|
||||||
asc = tagnames[f].isascii;
|
|
||||||
fputs(tagnames[f].name, stdout);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f == -1) {
|
|
||||||
printf("<0x%04x>", tag);
|
|
||||||
asc = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
p += 4;
|
|
||||||
if (tlen > 0) {
|
|
||||||
if (asc == -1) {
|
|
||||||
for (f = 0; f < tlen; f++)
|
|
||||||
if (!isascii(p[f]))
|
|
||||||
break;
|
|
||||||
asc = f == tlen;
|
|
||||||
}
|
|
||||||
fputc(' ', stdout);
|
|
||||||
if (asc)
|
|
||||||
printf("%.*s", (int)tlen, p);
|
|
||||||
else for (f = 0; f < tlen; f++)
|
|
||||||
printf("%02x", p[f]);
|
|
||||||
}
|
|
||||||
fputc(']', stdout);
|
|
||||||
|
|
||||||
p += tlen;
|
|
||||||
len -= tlen + 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actually do the job
|
* Actually do the job
|
||||||
*/
|
*/
|
||||||
@ -670,6 +517,14 @@ do_ppp_print(const u_char *p, u_int length, u_int caplen)
|
|||||||
case ETHERTYPE_IPX:
|
case ETHERTYPE_IPX:
|
||||||
ipx_print((const u_char *)(p + PPP_HDRLEN), length);
|
ipx_print((const u_char *)(p + PPP_HDRLEN), length);
|
||||||
break;
|
break;
|
||||||
|
#ifdef INET6
|
||||||
|
case ETHERTYPE_IPV6: /*XXX*/
|
||||||
|
#ifdef PPP_IPV6
|
||||||
|
case PPP_IPV6:
|
||||||
|
#endif
|
||||||
|
ip6_print((const u_char *)(p + PPP_HDRLEN), length);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if(!eflag)
|
if(!eflag)
|
||||||
@ -686,13 +541,35 @@ out:
|
|||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* proto type to string mapping */
|
struct tok ppptype2str[] = {
|
||||||
static struct tok ptype2str[] = {
|
{ PPP_IP, "IP" },
|
||||||
|
{ PPP_OSI, "OSI" },
|
||||||
|
{ PPP_NS, "NS" },
|
||||||
|
{ PPP_DECNET, "DECNET" },
|
||||||
|
{ PPP_APPLE, "APPLE" },
|
||||||
|
{ PPP_IPX, "IPX" },
|
||||||
{ PPP_VJC, "VJC" },
|
{ PPP_VJC, "VJC" },
|
||||||
{ PPP_VJNC, "VJNC" },
|
{ PPP_VJNC, "VJNC" },
|
||||||
{ PPP_OSI, "OSI" },
|
{ PPP_BRPDU, "BRPDU" },
|
||||||
{ PPP_LCP, "LCP" },
|
{ PPP_STII, "STII" },
|
||||||
|
{ PPP_VINES, "VINES" },
|
||||||
|
|
||||||
|
{ PPP_HELLO, "HELLO" },
|
||||||
|
{ PPP_LUXCOM, "LUXCOM" },
|
||||||
|
{ PPP_SNS, "SNS" },
|
||||||
{ PPP_IPCP, "IPCP" },
|
{ PPP_IPCP, "IPCP" },
|
||||||
|
{ PPP_OSICP, "OSICP" },
|
||||||
|
{ PPP_NSCP, "NSCP" },
|
||||||
|
{ PPP_DECNETCP, "DECNETCP" },
|
||||||
|
{ PPP_APPLECP, "APPLECP" },
|
||||||
|
{ PPP_IPXCP, "IPXCP" },
|
||||||
|
{ PPP_STIICP, "STIICP" },
|
||||||
|
{ PPP_VINESCP, "VINESCP" },
|
||||||
|
|
||||||
|
{ PPP_LCP, "LCP" },
|
||||||
|
{ PPP_PAP, "PAP" },
|
||||||
|
{ PPP_LQM, "LQM" },
|
||||||
|
{ PPP_CHAP, "CHAP" },
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -703,10 +580,13 @@ void
|
|||||||
ppp_bsdos_if_print(u_char *user, const struct pcap_pkthdr *h,
|
ppp_bsdos_if_print(u_char *user, const struct pcap_pkthdr *h,
|
||||||
register const u_char *p)
|
register const u_char *p)
|
||||||
{
|
{
|
||||||
|
#ifdef __bsdi__
|
||||||
register u_int length = h->len;
|
register u_int length = h->len;
|
||||||
register u_int caplen = h->caplen;
|
register u_int caplen = h->caplen;
|
||||||
register int hdrlength;
|
register int hdrlength;
|
||||||
u_short ptype;
|
u_short ptype;
|
||||||
|
const u_char *q;
|
||||||
|
int i;
|
||||||
|
|
||||||
ts_print(&h->ts);
|
ts_print(&h->ts);
|
||||||
|
|
||||||
@ -724,6 +604,7 @@ ppp_bsdos_if_print(u_char *user, const struct pcap_pkthdr *h,
|
|||||||
snapend = p + caplen;
|
snapend = p + caplen;
|
||||||
hdrlength = 0;
|
hdrlength = 0;
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (p[0] == PPP_ADDRESS && p[1] == PPP_CONTROL) {
|
if (p[0] == PPP_ADDRESS && p[1] == PPP_CONTROL) {
|
||||||
if (eflag)
|
if (eflag)
|
||||||
printf("%02x %02x ", p[0], p[1]);
|
printf("%02x %02x ", p[0], p[1]);
|
||||||
@ -749,16 +630,80 @@ ppp_bsdos_if_print(u_char *user, const struct pcap_pkthdr *h,
|
|||||||
p += 2;
|
p += 2;
|
||||||
hdrlength += 2;
|
hdrlength += 2;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
ptype = 0; /*XXX*/
|
||||||
|
if (eflag)
|
||||||
|
printf("%c ", p[SLC_DIR] ? 'O' : 'I');
|
||||||
|
if (p[SLC_LLHL]) {
|
||||||
|
/* link level header */
|
||||||
|
struct ppp_header *ph;
|
||||||
|
|
||||||
|
q = p + SLC_BPFHDRLEN;
|
||||||
|
ph = (struct ppp_header *)q;
|
||||||
|
if (ph->phdr_addr == PPP_ADDRESS
|
||||||
|
&& ph->phdr_ctl == PPP_CONTROL) {
|
||||||
|
if (eflag)
|
||||||
|
printf("%02x %02x ", q[0], q[1]);
|
||||||
|
ptype = ntohs(ph->phdr_type);
|
||||||
|
if (eflag && (ptype == PPP_VJC || ptype == PPP_VJNC)) {
|
||||||
|
printf("%s ", tok2str(ppptype2str,
|
||||||
|
"proto-#%d", ptype));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (eflag) {
|
||||||
|
printf("LLH=[");
|
||||||
|
for (i = 0; i < p[SLC_LLHL]; i++)
|
||||||
|
printf("%02x", q[i]);
|
||||||
|
printf("] ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (eflag)
|
||||||
|
printf("%d ", length);
|
||||||
|
}
|
||||||
|
if (p[SLC_CHL]) {
|
||||||
|
q = p + SLC_BPFHDRLEN + p[SLC_LLHL];
|
||||||
|
|
||||||
|
switch (ptype) {
|
||||||
|
case PPP_VJC:
|
||||||
|
ptype = vjc_print(q, length - (q - p), ptype);
|
||||||
|
hdrlength = PPP_BSDI_HDRLEN;
|
||||||
|
p += hdrlength;
|
||||||
|
if (ptype == PPP_IP)
|
||||||
|
ip_print(p, length);
|
||||||
|
goto printx;
|
||||||
|
case PPP_VJNC:
|
||||||
|
ptype = vjc_print(q, length - (q - p), ptype);
|
||||||
|
hdrlength = PPP_BSDI_HDRLEN;
|
||||||
|
p += hdrlength;
|
||||||
|
if (ptype == PPP_IP)
|
||||||
|
ip_print(p, length);
|
||||||
|
goto printx;
|
||||||
|
default:
|
||||||
|
if (eflag) {
|
||||||
|
printf("CH=[");
|
||||||
|
for (i = 0; i < p[SLC_LLHL]; i++)
|
||||||
|
printf("%02x", q[i]);
|
||||||
|
printf("] ");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hdrlength = PPP_BSDI_HDRLEN;
|
||||||
|
#endif
|
||||||
|
|
||||||
length -= hdrlength;
|
length -= hdrlength;
|
||||||
|
p += hdrlength;
|
||||||
|
|
||||||
if (ptype == PPP_IP)
|
if (ptype == PPP_IP)
|
||||||
ip_print(p, length);
|
ip_print(p, length);
|
||||||
else
|
else
|
||||||
printf("%s ", tok2str(ptype2str, "proto-#%d", ptype));
|
printf("%s ", tok2str(ppptype2str, "proto-#%d", ptype));
|
||||||
|
|
||||||
|
printx:
|
||||||
if (xflag)
|
if (xflag)
|
||||||
default_print((const u_char *)p, caplen - hdrlength);
|
default_print((const u_char *)p, caplen - hdrlength);
|
||||||
out:
|
out:
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
#endif /* __bsdi__ */
|
||||||
}
|
}
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-sl.c,v 1.42 97/06/12 14:21:35 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-sl.c,v 1.46 1999/11/21 12:38:24 itojun Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_NET_SLIP_H
|
#ifdef HAVE_NET_SLIP_H
|
||||||
@ -44,9 +50,7 @@ struct rtentry;
|
|||||||
#include <net/ethernet.h>
|
#include <net/ethernet.h>
|
||||||
#include <netinet/ip_var.h>
|
#include <netinet/ip_var.h>
|
||||||
#include <netinet/udp.h>
|
#include <netinet/udp.h>
|
||||||
#include <netinet/udp_var.h>
|
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
#include <netinet/tcpip.h>
|
|
||||||
|
|
||||||
#include <net/slcompress.h>
|
#include <net/slcompress.h>
|
||||||
#include <net/slip.h>
|
#include <net/slip.h>
|
||||||
@ -104,7 +108,18 @@ sl_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
|
|||||||
if (eflag)
|
if (eflag)
|
||||||
sliplink_print(p, ip, length);
|
sliplink_print(p, ip, length);
|
||||||
|
|
||||||
ip_print((u_char *)ip, length);
|
switch (ip->ip_v) {
|
||||||
|
case 4:
|
||||||
|
ip_print((u_char *)ip, length);
|
||||||
|
break;
|
||||||
|
#ifdef INET6
|
||||||
|
case 6:
|
||||||
|
ip6_print((u_char *)ip, length);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
printf ("ip v%d", ip->ip_v);
|
||||||
|
}
|
||||||
|
|
||||||
if (xflag)
|
if (xflag)
|
||||||
default_print((u_char *)ip, caplen - SLIP_HDRLEN);
|
default_print((u_char *)ip, caplen - SLIP_HDRLEN);
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-sunrpc.c,v 1.26 96/12/31 21:27:43 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-sunrpc.c,v 1.29 1999/11/21 09:37:02 fenner Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* Hacked version of print-ether.c Larry Lile <lile@stdio.com>
|
* Hacked version of print-ether.c Larry Lile <lile@stdio.com>
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
@ -107,7 +109,7 @@ token_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
|
|||||||
u_int length = h->len;
|
u_int length = h->len;
|
||||||
struct token_header *tp;
|
struct token_header *tp;
|
||||||
u_short ether_type;
|
u_short ether_type;
|
||||||
extern u_short extracted_ethertype;
|
u_short extracted_ethertype;
|
||||||
u_int route_len = 0, seg;
|
u_int route_len = 0, seg;
|
||||||
struct llc *lp;
|
struct llc *lp;
|
||||||
|
|
||||||
|
@ -17,11 +17,17 @@
|
|||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: print-udp.c,v 1.60 97/07/27 21:58:48 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.70 1999/12/22 06:27:23 itojun Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -51,6 +57,10 @@ static const char rcsid[] =
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
#include <netinet/ip6.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
#include "appletalk.h"
|
#include "appletalk.h"
|
||||||
@ -291,8 +301,23 @@ rtcp_print(const u_char *hdr, const u_char *ep)
|
|||||||
#define SNMP_PORT 161 /*XXX*/
|
#define SNMP_PORT 161 /*XXX*/
|
||||||
#define NTP_PORT 123 /*XXX*/
|
#define NTP_PORT 123 /*XXX*/
|
||||||
#define SNMPTRAP_PORT 162 /*XXX*/
|
#define SNMPTRAP_PORT 162 /*XXX*/
|
||||||
|
#define ISAKMP_PORT 500 /*XXX*/
|
||||||
#define RIP_PORT 520 /*XXX*/
|
#define RIP_PORT 520 /*XXX*/
|
||||||
#define KERBEROS_SEC_PORT 750 /*XXX*/
|
#define KERBEROS_SEC_PORT 750 /*XXX*/
|
||||||
|
#define L2TP_PORT 1701 /*XXX*/
|
||||||
|
#define ISAKMP_PORT_USER1 7500 /*??? - nonstandard*/
|
||||||
|
#define ISAKMP_PORT_USER2 8500 /*??? - nonstandard*/
|
||||||
|
#define RX_PORT_LOW 7000 /*XXX*/
|
||||||
|
#define RX_PORT_HIGH 7009 /*XXX*/
|
||||||
|
#define NETBIOS_NS_PORT 137
|
||||||
|
#define NETBIOS_DGRAM_PORT 138
|
||||||
|
#define CISCO_AUTORP_PORT 496 /*XXX*/
|
||||||
|
|
||||||
|
#ifdef INET6
|
||||||
|
#define RIPNG_PORT 521 /*XXX*/
|
||||||
|
#define DHCP6_SERV_PORT 546 /*XXX*/
|
||||||
|
#define DHCP6_CLI_PORT 547 /*XXX*/
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
|
udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
|
||||||
@ -302,18 +327,30 @@ udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
|
|||||||
register const u_char *cp;
|
register const u_char *cp;
|
||||||
register const u_char *ep = bp + length;
|
register const u_char *ep = bp + length;
|
||||||
u_short sport, dport, ulen;
|
u_short sport, dport, ulen;
|
||||||
|
#ifdef INET6
|
||||||
|
register const struct ip6_hdr *ip6;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ep > snapend)
|
if (ep > snapend)
|
||||||
ep = snapend;
|
ep = snapend;
|
||||||
up = (struct udphdr *)bp;
|
up = (struct udphdr *)bp;
|
||||||
ip = (struct ip *)bp2;
|
ip = (struct ip *)bp2;
|
||||||
|
#ifdef INET6
|
||||||
|
if (ip->ip_v == 6)
|
||||||
|
ip6 = (struct ip6_hdr *)bp2;
|
||||||
|
else
|
||||||
|
ip6 = NULL;
|
||||||
|
#endif /*INET6*/
|
||||||
cp = (u_char *)(up + 1);
|
cp = (u_char *)(up + 1);
|
||||||
if (cp > snapend) {
|
if (cp > snapend) {
|
||||||
printf("[|udp]");
|
(void)printf("%s > %s: [|udp]",
|
||||||
|
ipaddr_string(&ip->ip_src), ipaddr_string(&ip->ip_dst));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (length < sizeof(struct udphdr)) {
|
if (length < sizeof(struct udphdr)) {
|
||||||
(void)printf(" truncated-udp %d", length);
|
(void)printf("%s > %s: truncated-udp %d",
|
||||||
|
ipaddr_string(&ip->ip_src), ipaddr_string(&ip->ip_dst),
|
||||||
|
length);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
length -= sizeof(struct udphdr);
|
length -= sizeof(struct udphdr);
|
||||||
@ -374,6 +411,15 @@ udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
|
|||||||
while (cp < ep)
|
while (cp < ep)
|
||||||
cp = rtcp_print(cp, ep);
|
cp = rtcp_print(cp, ep);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PT_SNMP:
|
||||||
|
(void)printf("%s.%s > %s.%s:",
|
||||||
|
ipaddr_string(&ip->ip_src),
|
||||||
|
udpport_string(sport),
|
||||||
|
ipaddr_string(&ip->ip_dst),
|
||||||
|
udpport_string(dport));
|
||||||
|
snmp_print((const u_char *)(up + 1), length);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -411,9 +457,38 @@ udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
(void)printf("%s.%s > %s.%s:",
|
(void)printf("%s.%s > %s.%s:",
|
||||||
ipaddr_string(&ip->ip_src), udpport_string(sport),
|
ipaddr_string(&ip->ip_src), udpport_string(sport),
|
||||||
ipaddr_string(&ip->ip_dst), udpport_string(dport));
|
ipaddr_string(&ip->ip_dst), udpport_string(dport));
|
||||||
|
#else
|
||||||
|
#ifdef INET6
|
||||||
|
if (ip6) {
|
||||||
|
if (ip6->ip6_nxt == IPPROTO_UDP) {
|
||||||
|
(void)printf("%s.%s > %s.%s: ",
|
||||||
|
ip6addr_string(&ip6->ip6_src),
|
||||||
|
udpport_string(sport),
|
||||||
|
ip6addr_string(&ip6->ip6_dst),
|
||||||
|
udpport_string(dport));
|
||||||
|
} else {
|
||||||
|
(void)printf("%s > %s: ",
|
||||||
|
udpport_string(sport), udpport_string(dport));
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
#endif /*INET6*/
|
||||||
|
{
|
||||||
|
if (ip->ip_p == IPPROTO_UDP) {
|
||||||
|
(void)printf("%s.%s > %s.%s: ",
|
||||||
|
ipaddr_string(&ip->ip_src),
|
||||||
|
udpport_string(sport),
|
||||||
|
ipaddr_string(&ip->ip_dst),
|
||||||
|
udpport_string(dport));
|
||||||
|
} else {
|
||||||
|
(void)printf("%s > %s: ",
|
||||||
|
udpport_string(sport), udpport_string(dport));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!qflag) {
|
if (!qflag) {
|
||||||
#define ISPORT(p) (dport == (p) || sport == (p))
|
#define ISPORT(p) (dport == (p) || sport == (p))
|
||||||
@ -426,19 +501,51 @@ udp_print(register const u_char *bp, u_int length, register const u_char *bp2)
|
|||||||
sport, dport);
|
sport, dport);
|
||||||
else if (ISPORT(RIP_PORT))
|
else if (ISPORT(RIP_PORT))
|
||||||
rip_print((const u_char *)(up + 1), length);
|
rip_print((const u_char *)(up + 1), length);
|
||||||
|
else if (ISPORT(ISAKMP_PORT))
|
||||||
|
isakmp_print((const u_char *)(up + 1), length, bp2);
|
||||||
|
#if 1 /*???*/
|
||||||
|
else if (ISPORT(ISAKMP_PORT_USER1) || ISPORT(ISAKMP_PORT_USER2))
|
||||||
|
isakmp_print((const u_char *)(up + 1), length, bp2);
|
||||||
|
#endif
|
||||||
else if (ISPORT(SNMP_PORT) || ISPORT(SNMPTRAP_PORT))
|
else if (ISPORT(SNMP_PORT) || ISPORT(SNMPTRAP_PORT))
|
||||||
snmp_print((const u_char *)(up + 1), length);
|
snmp_print((const u_char *)(up + 1), length);
|
||||||
else if (ISPORT(NTP_PORT))
|
else if (ISPORT(NTP_PORT))
|
||||||
ntp_print((const u_char *)(up + 1), length);
|
ntp_print((const u_char *)(up + 1), length);
|
||||||
else if (ISPORT(KERBEROS_PORT) || ISPORT(KERBEROS_SEC_PORT))
|
else if (ISPORT(KERBEROS_PORT) || ISPORT(KERBEROS_SEC_PORT))
|
||||||
krb_print((const void *)(up + 1), length);
|
krb_print((const void *)(up + 1), length);
|
||||||
|
else if (ISPORT(L2TP_PORT))
|
||||||
|
l2tp_print((const u_char *)(up + 1), length);
|
||||||
|
else if (ISPORT(NETBIOS_NS_PORT)) {
|
||||||
|
nbt_udp137_print((const u_char *)(up + 1), length);
|
||||||
|
}
|
||||||
|
else if (ISPORT(NETBIOS_DGRAM_PORT)) {
|
||||||
|
nbt_udp138_print((const u_char *)(up + 1), length);
|
||||||
|
}
|
||||||
else if (dport == 3456)
|
else if (dport == 3456)
|
||||||
vat_print((const void *)(up + 1), length, up);
|
vat_print((const void *)(up + 1), length, up);
|
||||||
|
/*
|
||||||
|
* Since there are 10 possible ports to check, I think
|
||||||
|
* a <> test would be more efficient
|
||||||
|
*/
|
||||||
|
else if ((sport >= RX_PORT_LOW && sport <= RX_PORT_HIGH) ||
|
||||||
|
(dport >= RX_PORT_LOW && dport <= RX_PORT_HIGH))
|
||||||
|
rx_print((const void *)(up + 1), length, sport, dport,
|
||||||
|
(u_char *) ip);
|
||||||
|
#ifdef INET6
|
||||||
|
else if (ISPORT(RIPNG_PORT))
|
||||||
|
ripng_print((const u_char *)(up + 1), length);
|
||||||
|
else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT)) {
|
||||||
|
dhcp6_print((const u_char *)(up + 1), length,
|
||||||
|
sport, dport);
|
||||||
|
}
|
||||||
|
#endif /*INET6*/
|
||||||
/*
|
/*
|
||||||
* Kludge in test for whiteboard packets.
|
* Kludge in test for whiteboard packets.
|
||||||
*/
|
*/
|
||||||
else if (dport == 4567)
|
else if (dport == 4567)
|
||||||
wb_print((const void *)(up + 1), length);
|
wb_print((const void *)(up + 1), length);
|
||||||
|
else if (ISPORT(CISCO_AUTORP_PORT))
|
||||||
|
cisco_autorp_print((const void *)(up + 1), length);
|
||||||
else
|
else
|
||||||
(void)printf(" udp %u",
|
(void)printf(" udp %u",
|
||||||
(u_int32_t)(ulen - sizeof(*up)));
|
(u_int32_t)(ulen - sizeof(*up)));
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" @(#) $Header: tcpdump.1,v 1.67 97/06/30 16:31:50 leres Exp $ (LBL)
|
.\" @(#) $Header: /tcpdump/master/tcpdump/tcpdump.1,v 1.72.2.2 2000/01/29 16:42:03 itojun Exp $ (LBL)
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
|
.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
|
||||||
.\" The Regents of the University of California. All rights reserved.
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
@ -29,7 +29,7 @@ tcpdump \- dump traffic on a network
|
|||||||
.na
|
.na
|
||||||
.B tcpdump
|
.B tcpdump
|
||||||
[
|
[
|
||||||
.B \-adeflnNOpqStvxX
|
.B \-adeflnNOpqRStvxX
|
||||||
] [
|
] [
|
||||||
.B \-c
|
.B \-c
|
||||||
.I count
|
.I count
|
||||||
@ -42,16 +42,21 @@ tcpdump \- dump traffic on a network
|
|||||||
[
|
[
|
||||||
.B \-i
|
.B \-i
|
||||||
.I interface
|
.I interface
|
||||||
] [
|
]
|
||||||
|
[
|
||||||
|
.B \-m
|
||||||
|
.I module
|
||||||
|
]
|
||||||
|
[
|
||||||
.B \-r
|
.B \-r
|
||||||
.I file
|
.I file
|
||||||
]
|
]
|
||||||
|
.br
|
||||||
|
.ti +8
|
||||||
[
|
[
|
||||||
.B \-s
|
.B \-s
|
||||||
.I snaplen
|
.I snaplen
|
||||||
]
|
]
|
||||||
.br
|
|
||||||
.ti +8
|
|
||||||
[
|
[
|
||||||
.B \-T
|
.B \-T
|
||||||
.I type
|
.I type
|
||||||
@ -60,6 +65,8 @@ tcpdump \- dump traffic on a network
|
|||||||
.B \-w
|
.B \-w
|
||||||
.I file
|
.I file
|
||||||
]
|
]
|
||||||
|
.br
|
||||||
|
.ti +8
|
||||||
[
|
[
|
||||||
.I expression
|
.I expression
|
||||||
]
|
]
|
||||||
@ -148,6 +155,10 @@ Don't print domain name qualification of host names. E.g.,
|
|||||||
if you give this flag then \fItcpdump\fP will print ``nic''
|
if you give this flag then \fItcpdump\fP will print ``nic''
|
||||||
instead of ``nic.ddn.mil''.
|
instead of ``nic.ddn.mil''.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-m
|
||||||
|
Load SMI MIB module definitions from file \fImodule\fR. This option
|
||||||
|
can be used several times to load several MIB modules into tcpdump.
|
||||||
|
.TP
|
||||||
.B \-O
|
.B \-O
|
||||||
Do not run the packet-matching code optimizer. This is useful only
|
Do not run the packet-matching code optimizer. This is useful only
|
||||||
if you suspect a bug in the optimizer.
|
if you suspect a bug in the optimizer.
|
||||||
@ -186,10 +197,17 @@ specified \fItype\fR. Currently known types are
|
|||||||
\fBrpc\fR (Remote Procedure Call),
|
\fBrpc\fR (Remote Procedure Call),
|
||||||
\fBrtp\fR (Real-Time Applications protocol),
|
\fBrtp\fR (Real-Time Applications protocol),
|
||||||
\fBrtcp\fR (Real-Time Applications control protocol),
|
\fBrtcp\fR (Real-Time Applications control protocol),
|
||||||
|
\fBsnmp\fR (Simple Network Management Protocol),
|
||||||
\fBvat\fR (Visual Audio Tool),
|
\fBvat\fR (Visual Audio Tool),
|
||||||
and
|
and
|
||||||
\fBwb\fR (distributed White Board).
|
\fBwb\fR (distributed White Board).
|
||||||
.TP
|
.TP
|
||||||
|
.B \-R
|
||||||
|
Assume ESP/AH packets to be based on old specification (RFC1825 to RFC1829).
|
||||||
|
If specified, \fItcpdump\fP will not print replay prevention field.
|
||||||
|
Since there is no protocol version field in ESP/AH specification,
|
||||||
|
\fItcpdump\fP cannot deduce the version of ESP/AH protocol.
|
||||||
|
.TP
|
||||||
.B \-S
|
.B \-S
|
||||||
Print absolute, rather than relative, TCP sequence numbers.
|
Print absolute, rather than relative, TCP sequence numbers.
|
||||||
.TP
|
.TP
|
||||||
@ -207,6 +225,13 @@ and type of service information in an IP packet is printed.
|
|||||||
Even more verbose output. For example, additional fields are
|
Even more verbose output. For example, additional fields are
|
||||||
printed from NFS reply packets.
|
printed from NFS reply packets.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-vvv
|
||||||
|
Even more verbose output. For example,
|
||||||
|
telnet \fBSB\fP ... \fBSE\fP options
|
||||||
|
are printed in full. With
|
||||||
|
.B \-X
|
||||||
|
telnet options are printed in hex as well.
|
||||||
|
.TP
|
||||||
.B \-w
|
.B \-w
|
||||||
Write the raw packets to \fIfile\fR rather than parsing and printing
|
Write the raw packets to \fIfile\fR rather than parsing and printing
|
||||||
them out. They can later be printed with the \-r option.
|
them out. They can later be printed with the \-r option.
|
||||||
@ -219,9 +244,14 @@ The smaller of the entire packet or
|
|||||||
bytes will be printed.
|
bytes will be printed.
|
||||||
.TP
|
.TP
|
||||||
.B \-X
|
.B \-X
|
||||||
Like
|
When printing hex, print ascii too. Thus if
|
||||||
.B \-x
|
.B \-x
|
||||||
but dumps the packet in emacs-hexl like format with ASCII decoding.
|
is also set, the packet is printed in hex/ascii.
|
||||||
|
This is very handy for analysing new protocols.
|
||||||
|
Even if
|
||||||
|
.B \-x
|
||||||
|
is not also set, some parts of some packets may be printed
|
||||||
|
in hex/ascii.
|
||||||
.IP "\fI expression\fP"
|
.IP "\fI expression\fP"
|
||||||
.RS
|
.RS
|
||||||
selects which packets will be dumped. If no \fIexpression\fP
|
selects which packets will be dumped. If no \fIexpression\fP
|
||||||
@ -270,6 +300,7 @@ protos are:
|
|||||||
.BR ether ,
|
.BR ether ,
|
||||||
.BR fddi ,
|
.BR fddi ,
|
||||||
.BR ip ,
|
.BR ip ,
|
||||||
|
.BR ip6 ,
|
||||||
.BR arp ,
|
.BR arp ,
|
||||||
.BR rarp ,
|
.BR rarp ,
|
||||||
.BR decnet ,
|
.BR decnet ,
|
||||||
@ -280,6 +311,8 @@ protos are:
|
|||||||
.BR iso ,
|
.BR iso ,
|
||||||
.BR esis ,
|
.BR esis ,
|
||||||
.BR isis ,
|
.BR isis ,
|
||||||
|
.BR icmp ,
|
||||||
|
.BR icmp6 ,
|
||||||
.B tcp
|
.B tcp
|
||||||
and
|
and
|
||||||
.BR udp .
|
.BR udp .
|
||||||
@ -317,14 +350,14 @@ To save typing, identical qualifier lists can be omitted. E.g.,
|
|||||||
.LP
|
.LP
|
||||||
Allowable primitives are:
|
Allowable primitives are:
|
||||||
.IP "\fBdst host \fIhost\fR"
|
.IP "\fBdst host \fIhost\fR"
|
||||||
True if the IP destination field of the packet is \fIhost\fP,
|
True if the IPv4/v6 destination field of the packet is \fIhost\fP,
|
||||||
which may be either an address or a name.
|
which may be either an address or a name.
|
||||||
.IP "\fBsrc host \fIhost\fR"
|
.IP "\fBsrc host \fIhost\fR"
|
||||||
True if the IP source field of the packet is \fIhost\fP.
|
True if the IPv4/v6 source field of the packet is \fIhost\fP.
|
||||||
.IP "\fBhost \fIhost\fP
|
.IP "\fBhost \fIhost\fP
|
||||||
True if either the IP source or destination of the packet is \fIhost\fP.
|
True if either the IPv4/v6 source or destination of the packet is \fIhost\fP.
|
||||||
Any of the above host expressions can be prepended with the keywords,
|
Any of the above host expressions can be prepended with the keywords,
|
||||||
\fBip\fP, \fBarp\fP, or \fBrarp\fP as in:
|
\fBip\fP, \fBarp\fP, \fBrarp\fP, or \fBip6\fP as in:
|
||||||
.in +.5i
|
.in +.5i
|
||||||
.nf
|
.nf
|
||||||
\fBip host \fIhost\fR
|
\fBip host \fIhost\fR
|
||||||
@ -359,24 +392,26 @@ expression is
|
|||||||
.fi
|
.fi
|
||||||
.in -.5i
|
.in -.5i
|
||||||
which can be used with either names or numbers for \fIhost / ehost\fP.)
|
which can be used with either names or numbers for \fIhost / ehost\fP.)
|
||||||
|
This syntax does not work in IPv6-enabled configuration at this moment.
|
||||||
.IP "\fBdst net \fInet\fR"
|
.IP "\fBdst net \fInet\fR"
|
||||||
True if the IP destination address of the packet has a network
|
True if the IPv4/v6 destination address of the packet has a network
|
||||||
number of \fInet\fP. \fINet\fP may be either a name from /etc/networks
|
number of \fInet\fP. \fINet\fP may be either a name from /etc/networks
|
||||||
or a network number (see \fInetworks(4)\fP for details).
|
or a network number (see \fInetworks(4)\fP for details).
|
||||||
.IP "\fBsrc net \fInet\fR"
|
.IP "\fBsrc net \fInet\fR"
|
||||||
True if the IP source address of the packet has a network
|
True if the IPv4/v6 source address of the packet has a network
|
||||||
number of \fInet\fP.
|
number of \fInet\fP.
|
||||||
.IP "\fBnet \fInet\fR"
|
.IP "\fBnet \fInet\fR"
|
||||||
True if either the IP source or destination address of the packet has a network
|
True if either the IPv4/v6 source or destination address of the packet has a network
|
||||||
number of \fInet\fP.
|
number of \fInet\fP.
|
||||||
.IP "\fBnet \fInet\fR \fBmask \fImask\fR"
|
.IP "\fBnet \fInet\fR \fBmask \fImask\fR"
|
||||||
True if the IP address matches \fInet\fR with the specific netmask.
|
True if the IP address matches \fInet\fR with the specific netmask.
|
||||||
May be qualified with \fBsrc\fR or \fBdst\fR.
|
May be qualified with \fBsrc\fR or \fBdst\fR.
|
||||||
|
Note that this syntax is not valid for IPv6 \fInet\fR.
|
||||||
.IP "\fBnet \fInet\fR/\fIlen\fR"
|
.IP "\fBnet \fInet\fR/\fIlen\fR"
|
||||||
True if the IP address matches \fInet\fR a netmask \fIlen\fR bits wide.
|
True if the IPv4/v6 address matches \fInet\fR a netmask \fIlen\fR bits wide.
|
||||||
May be qualified with \fBsrc\fR or \fBdst\fR.
|
May be qualified with \fBsrc\fR or \fBdst\fR.
|
||||||
.IP "\fBdst port \fIport\fR"
|
.IP "\fBdst port \fIport\fR"
|
||||||
True if the packet is ip/tcp or ip/udp and has a
|
True if the packet is ip/tcp, ip/udp, ip6/tcp or ip6/udp and has a
|
||||||
destination port value of \fIport\fP.
|
destination port value of \fIport\fP.
|
||||||
The \fIport\fP can be a number or a name used in /etc/services (see
|
The \fIport\fP can be a number or a name used in /etc/services (see
|
||||||
.IR tcp (4P)
|
.IR tcp (4P)
|
||||||
@ -423,6 +458,29 @@ of protocol type \fIprotocol\fP.
|
|||||||
\fIicmp\fP, \fIigrp\fP, \fIudp\fP, \fInd\fP, or \fItcp\fP.
|
\fIicmp\fP, \fIigrp\fP, \fIudp\fP, \fInd\fP, or \fItcp\fP.
|
||||||
Note that the identifiers \fItcp\fP, \fIudp\fP, and \fIicmp\fP are also
|
Note that the identifiers \fItcp\fP, \fIudp\fP, and \fIicmp\fP are also
|
||||||
keywords and must be escaped via backslash (\\), which is \\\\ in the C-shell.
|
keywords and must be escaped via backslash (\\), which is \\\\ in the C-shell.
|
||||||
|
Note that this primitive does not chase protocol header chain.
|
||||||
|
.IP "\fBip6 proto \fIprotocol\fR"
|
||||||
|
True if the packet is an IPv6 packet of protocol type \fIprotocol\fP.
|
||||||
|
Note that this primitive does not chase protocol header chain.
|
||||||
|
.IP "\fBip6 protochain \fIprotocol\fR"
|
||||||
|
True if the packet is IPv6 packet,
|
||||||
|
and contains protocol header with type \fIprotocol\fR
|
||||||
|
in its protocol header chain.
|
||||||
|
For example,
|
||||||
|
.in +.5i
|
||||||
|
.nf
|
||||||
|
\fBip6 protochain 6\fR
|
||||||
|
.fi
|
||||||
|
.in -.5i
|
||||||
|
matches any IPv6 packet with TCP protocol header in the protocol header chain.
|
||||||
|
The packet may contain, for example,
|
||||||
|
authentication header, routing header, or hop-by-hop option header,
|
||||||
|
between IPv6 header and TCP header.
|
||||||
|
The BPF code emitted by this primitive is complex and
|
||||||
|
cannot be optimized by BPF optimizer code in \fItcpdump\fP,
|
||||||
|
so this can be somewhat slow.
|
||||||
|
.IP "\fBip protochain \fIprotocol\fR"
|
||||||
|
Equivalent to \fBip6 protochain \fIprotocol\fR, but this is for IPv4.
|
||||||
.IP "\fBether broadcast\fR"
|
.IP "\fBether broadcast\fR"
|
||||||
True if the packet is an ethernet broadcast packet. The \fIether\fP
|
True if the packet is an ethernet broadcast packet. The \fIether\fP
|
||||||
keyword is optional.
|
keyword is optional.
|
||||||
@ -436,10 +494,12 @@ keyword is optional.
|
|||||||
This is shorthand for `\fBether[0] & 1 != 0\fP'.
|
This is shorthand for `\fBether[0] & 1 != 0\fP'.
|
||||||
.IP "\fBip multicast\fR"
|
.IP "\fBip multicast\fR"
|
||||||
True if the packet is an IP multicast packet.
|
True if the packet is an IP multicast packet.
|
||||||
|
.IP "\fBip6 multicast\fR"
|
||||||
|
True if the packet is an IPv6 multicast packet.
|
||||||
.IP "\fBether proto \fIprotocol\fR"
|
.IP "\fBether proto \fIprotocol\fR"
|
||||||
True if the packet is of ether type \fIprotocol\fR.
|
True if the packet is of ether type \fIprotocol\fR.
|
||||||
\fIProtocol\fP can be a number or a name like
|
\fIProtocol\fP can be a number or a name like
|
||||||
\fIip\fP, \fIarp\fP, or \fIrarp\fP.
|
\fIip\fP, \fIip6\fP, \fIarp\fP, or \fIrarp\fP.
|
||||||
Note these identifiers are also keywords
|
Note these identifiers are also keywords
|
||||||
and must be escaped via backslash (\\).
|
and must be escaped via backslash (\\).
|
||||||
[In the case of FDDI (e.g., `\fBfddi protocol arp\fR'), the
|
[In the case of FDDI (e.g., `\fBfddi protocol arp\fR'), the
|
||||||
@ -460,7 +520,7 @@ True if the DECNET destination address is
|
|||||||
.IP "\fBdecnet host \fIhost\fR"
|
.IP "\fBdecnet host \fIhost\fR"
|
||||||
True if either the DECNET source or destination address is
|
True if either the DECNET source or destination address is
|
||||||
.IR host .
|
.IR host .
|
||||||
.IP "\fBip\fR, \fBarp\fR, \fBrarp\fR, \fBdecnet\fR, \fBiso\fR"
|
.IP "\fBip\fR, \fBip6\fR, \fBarp\fR, \fBrarp\fR, \fBdecnet\fR, \fBiso\fR"
|
||||||
Abbreviations for:
|
Abbreviations for:
|
||||||
.in +.5i
|
.in +.5i
|
||||||
.nf
|
.nf
|
||||||
@ -482,7 +542,7 @@ Note that
|
|||||||
Abbreviations for:
|
Abbreviations for:
|
||||||
.in +.5i
|
.in +.5i
|
||||||
.nf
|
.nf
|
||||||
\fBip proto \fIp\fR
|
\fBip proto \fIp\fR\fB or ip6 proto \fIp\fR
|
||||||
.fi
|
.fi
|
||||||
.in -.5i
|
.in -.5i
|
||||||
where \fIp\fR is one of the above protocols.
|
where \fIp\fR is one of the above protocols.
|
||||||
@ -508,8 +568,10 @@ data inside the packet, use the following syntax:
|
|||||||
.fi
|
.fi
|
||||||
.in -.5i
|
.in -.5i
|
||||||
\fIProto\fR is one of \fBether, fddi,
|
\fIProto\fR is one of \fBether, fddi,
|
||||||
ip, arp, rarp, tcp, udp, \fRor \fBicmp\fR, and
|
ip, arp, rarp, tcp, udp, icmp\fR or \fBip6\fR, and
|
||||||
indicates the protocol layer for the index operation.
|
indicates the protocol layer for the index operation.
|
||||||
|
Note that \fItcp, udp\fR and other upper-layer protocol types only
|
||||||
|
apply to IPv4, not IPv6 (this will be fixed in the future).
|
||||||
The byte offset, relative to the indicated protocol layer, is
|
The byte offset, relative to the indicated protocol layer, is
|
||||||
given by \fIexpr\fR.
|
given by \fIexpr\fR.
|
||||||
\fISize\fR is optional and indicates the number of bytes in the
|
\fISize\fR is optional and indicates the number of bytes in the
|
||||||
@ -946,6 +1008,27 @@ to print. Use the \fB\-s\fP flag to increase the snaplen if you
|
|||||||
need to seriously investigate name server traffic. `\fB\-s 128\fP'
|
need to seriously investigate name server traffic. `\fB\-s 128\fP'
|
||||||
has worked well for me.
|
has worked well for me.
|
||||||
|
|
||||||
|
.HD
|
||||||
|
SMB/CIFS decoding
|
||||||
|
.LP
|
||||||
|
tcpdump now includes fairly extensive SMB/CIFS/NBT decoding for data
|
||||||
|
on UDP/137, UDP/138 and TCP/139. Some primitive decoding of IPX and
|
||||||
|
NetBEUI SMB data is also done.
|
||||||
|
|
||||||
|
By default a fairly minimal decode is done, with a much more detailed
|
||||||
|
decode done if -v is used. Be warned that with -v a single SMB packet
|
||||||
|
may take up a page or more, so only use -v if you really want all the
|
||||||
|
gory details.
|
||||||
|
|
||||||
|
If you are decoding SMB sessions containing unicode strings then you
|
||||||
|
may wish to set the environment variable USE_UNICODE to 1. A patch to
|
||||||
|
auto-detect unicode srings would be welcome.
|
||||||
|
|
||||||
|
For information on SMB packet formats and what all te fields mean see
|
||||||
|
www.cifs.org or the pub/samba/specs/ directory on your favourite
|
||||||
|
samba.org mirror site. The SMB patches were written by Andrew Tridgell
|
||||||
|
(tridge@samba.org).
|
||||||
|
|
||||||
.HD
|
.HD
|
||||||
NFS Requests and Replies
|
NFS Requests and Replies
|
||||||
.LP
|
.LP
|
||||||
@ -1019,6 +1102,64 @@ NFS reply packets do not explicitly identify the RPC operation. Instead,
|
|||||||
\fItcpdump\fP keeps track of ``recent'' requests, and matches them to the
|
\fItcpdump\fP keeps track of ``recent'' requests, and matches them to the
|
||||||
replies using the transaction ID. If a reply does not closely follow the
|
replies using the transaction ID. If a reply does not closely follow the
|
||||||
corresponding request, it might not be parsable.
|
corresponding request, it might not be parsable.
|
||||||
|
.HD
|
||||||
|
AFS Request and Replies
|
||||||
|
.LP
|
||||||
|
Transarc AFS (Andrew File System) requests and replies are printed
|
||||||
|
as:
|
||||||
|
.HD
|
||||||
|
.RS
|
||||||
|
.nf
|
||||||
|
.sp .5
|
||||||
|
\fIsrc.sport > dst.dport: rx packet-type\fP
|
||||||
|
\fIsrc.sport > dst.dport: rx packet-type service call call-name args\fP
|
||||||
|
\fIsrc.sport > dst.dport: rx packet-type service reply call-name args\fP
|
||||||
|
.sp .5
|
||||||
|
\f(CW
|
||||||
|
elvis.7001 > pike.afsfs:
|
||||||
|
rx data fs call rename old fid 536876964/1/1 ".newsrc.new"
|
||||||
|
new fid 536876964/1/1 ".newsrc"
|
||||||
|
pike.afsfs > elvis.7001: rx data fs reply rename
|
||||||
|
\fP
|
||||||
|
.sp .5
|
||||||
|
.fi
|
||||||
|
.RE
|
||||||
|
In the first line, host elvis sends a RX packet to pike. This was
|
||||||
|
a RX data packet to the fs (fileserver) service, and is the start of
|
||||||
|
an RPC call. The RPC call was a rename, with the old directory file id
|
||||||
|
of 536876964/1/1 and an old filename of `.newsrc.new', and a new directory
|
||||||
|
file id of 536876964/1/1 and a new filename of `.newsrc'. The host pike
|
||||||
|
responds with a RPC reply to the rename call (which was successful, because
|
||||||
|
it was a data packet and not an abort packet).
|
||||||
|
.LP
|
||||||
|
In general, all AFS RPCs are decoded at least by RPC call name. Most
|
||||||
|
AFS RPCs have at least some of the arguments decoded (generally only
|
||||||
|
the `interesting' arguments, for some definition of interesting).
|
||||||
|
.LP
|
||||||
|
The format is intended to be self-describing, but it will probably
|
||||||
|
not be useful to people who are not familiar with the workings of
|
||||||
|
AFS and RX.
|
||||||
|
.LP
|
||||||
|
If the -v (verbose) flag is given twice, additional information is printed,
|
||||||
|
such as the the RX call ID, call number, sequence number, serial number,
|
||||||
|
and the RX packet flags.
|
||||||
|
.LP
|
||||||
|
If the -v flag is given again, the security index and service id are printed.
|
||||||
|
.LP
|
||||||
|
Error codes are printed for abort packets, with the exception of Ubik
|
||||||
|
beacon packets (because abort packets are used to signify a yes vote
|
||||||
|
for the Ubik protocol).
|
||||||
|
.LP
|
||||||
|
Note that AFS requests are very large and many of the arguments won't
|
||||||
|
be printed unless \fIsnaplen\fP is increased. Try using `\fB-s 256\fP'
|
||||||
|
to watch AFS traffic.
|
||||||
|
.LP
|
||||||
|
AFS reply packets do not explicitly identify the RPC operation. Instead,
|
||||||
|
\fItcpdump\fP keeps track of ``recent'' requests, and matches them to the
|
||||||
|
replies using the call number and service ID. If a reply does not closely
|
||||||
|
follow the
|
||||||
|
corresponding request, it might not be parsable.
|
||||||
|
|
||||||
.HD
|
.HD
|
||||||
KIP Appletalk (DDP in UDP)
|
KIP Appletalk (DDP in UDP)
|
||||||
.LP
|
.LP
|
||||||
@ -1209,6 +1350,9 @@ The current version is available via anonymous ftp:
|
|||||||
.RS
|
.RS
|
||||||
.I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z
|
.I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z
|
||||||
.RE
|
.RE
|
||||||
|
.LP
|
||||||
|
IPv6/IPsec support is added by WIDE/KAME project.
|
||||||
|
This program uses Eric Young's SSLeay library, under specific configuration.
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
Please send bug reports to tcpdump@ee.lbl.gov.
|
Please send bug reports to tcpdump@ee.lbl.gov.
|
||||||
.LP
|
.LP
|
||||||
@ -1237,3 +1381,14 @@ packets are encapsulated Ethernet packets. This is true for IP, ARP,
|
|||||||
and DECNET Phase IV, but is not true for protocols such as ISO CLNS.
|
and DECNET Phase IV, but is not true for protocols such as ISO CLNS.
|
||||||
Therefore, the filter may inadvertently accept certain packets that
|
Therefore, the filter may inadvertently accept certain packets that
|
||||||
do not properly match the filter expression.
|
do not properly match the filter expression.
|
||||||
|
.LP
|
||||||
|
.BR "ip6 proto"
|
||||||
|
should chase header chain, but at this moment it does not.
|
||||||
|
.BR tcp
|
||||||
|
or
|
||||||
|
.BR udp
|
||||||
|
should chase header chain too.
|
||||||
|
.LP
|
||||||
|
Arithmetic expression against transport layer headers, like \fBtcp[0]\fP,
|
||||||
|
does not work against IPv6 packets.
|
||||||
|
It only looks at IPv4 packets.
|
||||||
|
@ -24,7 +24,7 @@ static const char copyright[] =
|
|||||||
"@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997\n\
|
"@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997\n\
|
||||||
The Regents of the University of California. All rights reserved.\n";
|
The Regents of the University of California. All rights reserved.\n";
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: tcpdump.c,v 1.129 97/06/13 13:10:11 leres Exp $ (LBL)";
|
"@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.138.2.1 2000/01/11 07:34:00 fenner Exp $ (LBL)";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* $FreeBSD$ */
|
/* $FreeBSD$ */
|
||||||
@ -37,6 +37,10 @@ static const char rcsid[] =
|
|||||||
* combined efforts of Van, Steve McCanne and Craig Leres of LBL.
|
* combined efforts of Van, Steve McCanne and Craig Leres of LBL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
@ -48,6 +52,10 @@ static const char rcsid[] =
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include <netinet/in_systm.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "addrtoname.h"
|
#include "addrtoname.h"
|
||||||
@ -64,11 +72,16 @@ int Nflag; /* remove domains from printed host names */
|
|||||||
int Oflag = 1; /* run filter code optimizer */
|
int Oflag = 1; /* run filter code optimizer */
|
||||||
int pflag; /* don't go promiscuous */
|
int pflag; /* don't go promiscuous */
|
||||||
int qflag; /* quick (shorter) output */
|
int qflag; /* quick (shorter) output */
|
||||||
|
int Rflag = 1; /* print sequence # field in AH/ESP*/
|
||||||
|
int sflag = 0; /* use the libsmi to translate OIDs */
|
||||||
int Sflag; /* print raw TCP sequence numbers */
|
int Sflag; /* print raw TCP sequence numbers */
|
||||||
int tflag = 1; /* print packet arrival time */
|
int tflag = 1; /* print packet arrival time */
|
||||||
int vflag; /* verbose */
|
int vflag; /* verbose */
|
||||||
int xflag; /* print packet in hex */
|
int xflag; /* print packet in hex */
|
||||||
int Xflag; /* print packet in emacs-hexl style */
|
int Xflag; /* print packet in ascii as well as hex */
|
||||||
|
|
||||||
|
char *ahsecret = NULL; /* AH secret key */
|
||||||
|
char *espsecret = NULL; /* ESP secret key */
|
||||||
|
|
||||||
int packettype;
|
int packettype;
|
||||||
|
|
||||||
@ -95,6 +108,12 @@ struct printer {
|
|||||||
static struct printer printers[] = {
|
static struct printer printers[] = {
|
||||||
{ ether_if_print, DLT_EN10MB },
|
{ ether_if_print, DLT_EN10MB },
|
||||||
{ token_if_print, DLT_IEEE802 },
|
{ token_if_print, DLT_IEEE802 },
|
||||||
|
#ifdef DLT_LANE8023
|
||||||
|
{ lane_if_print, DLT_LANE8023 },
|
||||||
|
#endif
|
||||||
|
#ifdef DLT_CIP
|
||||||
|
{ cip_if_print, DLT_CIP },
|
||||||
|
#endif
|
||||||
{ sl_if_print, DLT_SLIP },
|
{ sl_if_print, DLT_SLIP },
|
||||||
{ sl_bsdos_if_print, DLT_SLIP_BSDOS },
|
{ sl_bsdos_if_print, DLT_SLIP_BSDOS },
|
||||||
{ ppp_if_print, DLT_PPP },
|
{ ppp_if_print, DLT_PPP },
|
||||||
@ -103,6 +122,9 @@ static struct printer printers[] = {
|
|||||||
{ null_if_print, DLT_NULL },
|
{ null_if_print, DLT_NULL },
|
||||||
{ raw_if_print, DLT_RAW },
|
{ raw_if_print, DLT_RAW },
|
||||||
{ atm_if_print, DLT_ATM_RFC1483 },
|
{ atm_if_print, DLT_ATM_RFC1483 },
|
||||||
|
#ifdef DLT_CHDLC
|
||||||
|
{ chdlc_if_print, DLT_CHDLC },
|
||||||
|
#endif
|
||||||
{ NULL, 0 },
|
{ NULL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -150,15 +172,28 @@ main(int argc, char **argv)
|
|||||||
if (abort_on_misalignment(ebuf) < 0)
|
if (abort_on_misalignment(ebuf) < 0)
|
||||||
error("%s", ebuf);
|
error("%s", ebuf);
|
||||||
|
|
||||||
|
#ifdef LIBSMI
|
||||||
|
smiInit("tcpdump");
|
||||||
|
#endif
|
||||||
|
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
while (
|
while (
|
||||||
(op = getopt(argc, argv, "ac:defF:i:lnNOpqr:s:StT:vw:xXY")) != EOF)
|
(op = getopt(argc, argv, "ac:deE:fF:i:lnNm:Opqr:Rs:StT:vw:xXY")) != EOF)
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
|
||||||
case 'a':
|
case 'a':
|
||||||
++aflag;
|
++aflag;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
case 'A':
|
||||||
|
#ifndef CRYPTO
|
||||||
|
warning("crypto code not compiled in");
|
||||||
|
#endif
|
||||||
|
ahsecret = optarg;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
cnt = atoi(optarg);
|
cnt = atoi(optarg);
|
||||||
if (cnt <= 0)
|
if (cnt <= 0)
|
||||||
@ -173,6 +208,13 @@ main(int argc, char **argv)
|
|||||||
++eflag;
|
++eflag;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'E':
|
||||||
|
#ifndef CRYPTO
|
||||||
|
warning("crypto code not compiled in");
|
||||||
|
#endif
|
||||||
|
espsecret = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
++fflag;
|
++fflag;
|
||||||
break;
|
break;
|
||||||
@ -201,6 +243,18 @@ main(int argc, char **argv)
|
|||||||
++Nflag;
|
++Nflag;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'm':
|
||||||
|
#ifdef LIBSMI
|
||||||
|
if (smiLoadModule(optarg) == 0) {
|
||||||
|
error("could not load MIB module %s", optarg);
|
||||||
|
}
|
||||||
|
sflag = 1;
|
||||||
|
#else
|
||||||
|
(void)fprintf(stderr, "%s: ignoring option `-m %s' ",
|
||||||
|
program_name, optarg);
|
||||||
|
(void)fprintf(stderr, "(no libsmi support)\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
case 'O':
|
case 'O':
|
||||||
Oflag = 0;
|
Oflag = 0;
|
||||||
break;
|
break;
|
||||||
@ -217,6 +271,10 @@ main(int argc, char **argv)
|
|||||||
RFileName = optarg;
|
RFileName = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'R':
|
||||||
|
Rflag = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
snaplen = atoi(optarg);
|
snaplen = atoi(optarg);
|
||||||
if (snaplen <= 0)
|
if (snaplen <= 0)
|
||||||
@ -242,6 +300,8 @@ main(int argc, char **argv)
|
|||||||
packettype = PT_RTP;
|
packettype = PT_RTP;
|
||||||
else if (strcasecmp(optarg, "rtcp") == 0)
|
else if (strcasecmp(optarg, "rtcp") == 0)
|
||||||
packettype = PT_RTCP;
|
packettype = PT_RTCP;
|
||||||
|
else if (strcasecmp(optarg, "snmp") == 0)
|
||||||
|
packettype = PT_SNMP;
|
||||||
else
|
else
|
||||||
error("unknown packet type `%s'", optarg);
|
error("unknown packet type `%s'", optarg);
|
||||||
break;
|
break;
|
||||||
@ -253,6 +313,16 @@ main(int argc, char **argv)
|
|||||||
case 'w':
|
case 'w':
|
||||||
WFileName = optarg;
|
WFileName = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
++xflag;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'X':
|
||||||
|
++xflag;
|
||||||
|
++Xflag;
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef YYDEBUG
|
#ifdef YYDEBUG
|
||||||
case 'Y':
|
case 'Y':
|
||||||
{
|
{
|
||||||
@ -262,15 +332,6 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case 'x':
|
|
||||||
++xflag;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'X':
|
|
||||||
++Xflag;
|
|
||||||
if (xflag == 0) ++xflag;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
@ -446,61 +507,31 @@ default_print_unaligned(register const u_char *cp, register u_int length)
|
|||||||
register int nshorts;
|
register int nshorts;
|
||||||
|
|
||||||
if (Xflag) {
|
if (Xflag) {
|
||||||
/* dump the buffer in `emacs-hexl' style */
|
ascii_print(cp, length);
|
||||||
default_print_hexl(cp, length, 0);
|
return;
|
||||||
} else {
|
}
|
||||||
/* dump the buffer in old tcpdump style */
|
nshorts = (u_int) length / sizeof(u_short);
|
||||||
nshorts = (u_int) length / sizeof(u_short);
|
i = 0;
|
||||||
i = 0;
|
while (--nshorts >= 0) {
|
||||||
while (--nshorts >= 0) {
|
if ((i++ % 8) == 0)
|
||||||
if ((i++ % 8) == 0)
|
(void)printf("\n\t\t\t");
|
||||||
(void)printf("\n\t\t\t");
|
s = *cp++;
|
||||||
s = *cp++;
|
(void)printf(" %02x%02x", s, *cp++);
|
||||||
(void)printf(" %02x%02x", s, *cp++);
|
}
|
||||||
}
|
if (length & 1) {
|
||||||
if (length & 1) {
|
if ((i % 8) == 0)
|
||||||
if ((i % 8) == 0)
|
(void)printf("\n\t\t\t");
|
||||||
(void)printf("\n\t\t\t");
|
(void)printf(" %02x", *cp);
|
||||||
(void)printf(" %02x", *cp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* By default, print the packet out in hex.
|
* By default, print the packet out in hex.
|
||||||
*
|
|
||||||
* (BTW, please don't send us patches to print the packet out in ascii)
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
default_print(register const u_char *bp, register u_int length)
|
default_print(register const u_char *bp, register u_int length)
|
||||||
{
|
{
|
||||||
register const u_short *sp;
|
default_print_unaligned(bp, length);
|
||||||
register u_int i;
|
|
||||||
register int nshorts;
|
|
||||||
|
|
||||||
if (Xflag) {
|
|
||||||
/* dump the buffer in `emacs-hexl' style */
|
|
||||||
default_print_hexl(bp, length, 0);
|
|
||||||
} else {
|
|
||||||
/* dump the buffer in old tcpdump style */
|
|
||||||
if ((long)bp & 1) {
|
|
||||||
default_print_unaligned(bp, length);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
sp = (u_short *)bp;
|
|
||||||
nshorts = (u_int) length / sizeof(u_short);
|
|
||||||
i = 0;
|
|
||||||
while (--nshorts >= 0) {
|
|
||||||
if ((i++ % 8) == 0)
|
|
||||||
(void)printf("\n\t\t\t");
|
|
||||||
(void)printf(" %04x", ntohs(*sp++));
|
|
||||||
}
|
|
||||||
if (length & 1) {
|
|
||||||
if ((i % 8) == 0)
|
|
||||||
(void)printf("\n\t\t\t");
|
|
||||||
(void)printf(" %02x", *(u_char *)sp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__dead void
|
__dead void
|
||||||
|
@ -1,22 +1,23 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
PROG= tcpdump
|
PROG= tcpdump
|
||||||
CFLAGS+=-DHAVE_FCNTL_H=1 -DHAVE_NET_SLIP_H=1 -DTIME_WITH_SYS_TIME=1 \
|
CFLAGS+=-DHAVE_CONFIG_H -I${.CURDIR}
|
||||||
-DHAVE_ETHER_NTOHOST=1 -DHAVE_SETLINEBUF=1 -DSTDC_HEADERS=1 \
|
|
||||||
-DRETSIGTYPE=void -DRETSIGVAL= -DHAVE_SOCKADDR_SA_LEN=1 \
|
|
||||||
-DHAVE_TM_GMTOFF=1 -DLBL_ALIGN=1 -DPPP -DHAVE_FDDI
|
|
||||||
MAN1= tcpdump.1
|
MAN1= tcpdump.1
|
||||||
SRCS = version.c tcpdump.c \
|
SRCS = version.c tcpdump.c \
|
||||||
print-arp.c print-atalk.c print-atm.c print-fr.c print-bootp.c \
|
|
||||||
print-decnet.c print-domain.c print-dvmrp.c print-egp.c \
|
|
||||||
print-ether.c print-fddi.c print-gre.c print-icmp.c \
|
|
||||||
print-igrp.c print-ip.c print-ipx.c print-isoclns.c print-krb.c \
|
|
||||||
print-llc.c print-nfs.c print-ntp.c print-null.c print-ospf.c \
|
|
||||||
print-pim.c print-ppp.c print-raw.c print-rip.c print-sl.c \
|
|
||||||
print-snmp.c print-sunrpc.c print-tcp.c print-tftp.c print-udp.c \
|
|
||||||
print-wb.c \
|
|
||||||
addrtoname.c bpf_dump.c gmt2local.c machdep.c parsenfsfh.c \
|
addrtoname.c bpf_dump.c gmt2local.c machdep.c parsenfsfh.c \
|
||||||
setsignal.c savestr.c util.c print-token.c
|
print-ah.c print-arp.c print-ascii.c print-atalk.c print-atm.c \
|
||||||
|
print-bgp.c print-bootp.c print-chdlc.c print-cip.c print-decnet.c \
|
||||||
|
print-dhcp6.c print-domain.c print-dvmrp.c print-egp.c print-esp.c \
|
||||||
|
print-ether.c print-fddi.c print-frag6.c print-gre.c print-icmp.c \
|
||||||
|
print-icmp6.c print-igrp.c print-ip.c print-ip6.c print-ip6opts.c \
|
||||||
|
print-ipcomp.c print-ipx.c print-isakmp.c print-isoclns.c print-krb.c \
|
||||||
|
print-l2tp.c print-lane.c print-lcp.c print-llc.c print-mobile.c \
|
||||||
|
print-nfs.c print-ntp.c print-null.c print-ospf.c print-ospf6.c \
|
||||||
|
print-pim.c print-ppp.c print-pppoe.c print-raw.c print-rip.c \
|
||||||
|
print-ripng.c print-rt6.c print-rx.c print-sl.c print-smb.c \
|
||||||
|
print-snmp.c print-sunrpc.c print-tcp.c print-telnet.c print-tftp.c \
|
||||||
|
print-token.c print-udp.c print-vjc.c print-wb.c \
|
||||||
|
savestr.c setsignal.c smbutil.c util.c
|
||||||
CLEANFILES+= version.c
|
CLEANFILES+= version.c
|
||||||
DPADD+= ${LIBL} ${LIBPCAP}
|
DPADD+= ${LIBL} ${LIBPCAP}
|
||||||
LDADD+= -ll -lpcap
|
LDADD+= -ll -lpcap
|
||||||
|
223
usr.sbin/tcpdump/tcpdump/config.h
Normal file
223
usr.sbin/tcpdump/tcpdump/config.h
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
/* $FreeBSD$ */
|
||||||
|
|
||||||
|
/* config.h. Generated automatically by configure. */
|
||||||
|
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||||
|
/* "generated automatically" means DO NOT MAKE CHANGES TO config.h.in --
|
||||||
|
* make them to acconfig.h and rerun autoheader */
|
||||||
|
|
||||||
|
/* Define to empty if the keyword does not work. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define as __inline if that's what the C compiler calls it. */
|
||||||
|
/* #undef inline */
|
||||||
|
|
||||||
|
/* Define as the return type of signal handlers (int or void). */
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
|
||||||
|
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
#define TIME_WITH_SYS_TIME 1
|
||||||
|
|
||||||
|
/* Define if your processor stores words with the most significant
|
||||||
|
byte first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||||
|
/* #undef WORDS_BIGENDIAN */
|
||||||
|
|
||||||
|
/* Define if you have SSLeay XXX why isn't this HAVE_LIBCRYPTO? */
|
||||||
|
/* #undef CRYPTO */
|
||||||
|
|
||||||
|
/* Define if you have SSLeay 0.9.0b with the buggy cast128. */
|
||||||
|
/* #undef HAVE_BUGGY_CAST128 */
|
||||||
|
|
||||||
|
/* Define both to enable IPv6 support XXX why 2? ENABLE_IPV6 is not used. */
|
||||||
|
#define ENABLE_IPV6 1
|
||||||
|
#define INET6 1
|
||||||
|
|
||||||
|
/* Define if you enable support for the libsmi. */
|
||||||
|
/* #undef LIBSMI */
|
||||||
|
|
||||||
|
/* Is T_AAAA predefined? */
|
||||||
|
#define HAVE_AAAA 1
|
||||||
|
|
||||||
|
/* Fallback definition if not in headers */
|
||||||
|
/* XXX why is this not #ifndef HAVE_AAA #define T_AAAA ... ? */
|
||||||
|
/* XXX or even #ifndef T_AAAA ... */
|
||||||
|
/* #undef T_AAAA */
|
||||||
|
|
||||||
|
/* define if you have struct __res_state_ext */
|
||||||
|
#define HAVE_RES_STATE_EXT 1
|
||||||
|
|
||||||
|
/* define if your struct __res_state has the nsort member */
|
||||||
|
#define HAVE_NEW_RES_STATE 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* define if struct ether_header.ether_dhost is a struct with ether_addr_octet
|
||||||
|
*/
|
||||||
|
/* #undef ETHER_HEADER_HAS_EA */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* define if struct ether_arp.arp_sha is a struct with ether_addr_octet
|
||||||
|
*/
|
||||||
|
/* #undef ETHER_ARP_HAS_EA */
|
||||||
|
|
||||||
|
/* define if struct ether_arp contains arp_xsha */
|
||||||
|
/* #undef ETHER_ARP_HAS_X */
|
||||||
|
|
||||||
|
/* define if you have the addrinfo function. */
|
||||||
|
#define HAVE_ADDRINFO 1
|
||||||
|
|
||||||
|
/* define if you need to include missing/addrinfoh.h. */
|
||||||
|
/* #undef NEED_ADDRINFO_H */
|
||||||
|
|
||||||
|
/* define ifyou have the h_errno variable. */
|
||||||
|
#define HAVE_H_ERRNO 1
|
||||||
|
|
||||||
|
/* define if IN6ADDRSZ is defined (XXX not used!) */
|
||||||
|
#define HAVE_IN6ADDRSZ 1
|
||||||
|
|
||||||
|
/* define if INADDRSZ is defined (XXX not used!) */
|
||||||
|
#define HAVE_INADDRSZ 1
|
||||||
|
|
||||||
|
/* define if you have <net/slip.h> */
|
||||||
|
#define HAVE_NET_SLIP_H 1
|
||||||
|
|
||||||
|
/* define if this is a development version, to use additional prototypes. */
|
||||||
|
/* #undef HAVE_OS_PROTO_H */
|
||||||
|
|
||||||
|
/* define if <unistd.h> defines __P() */
|
||||||
|
#define HAVE_PORTABLE_PROTOTYPE 1
|
||||||
|
|
||||||
|
/* define if RES_USE_INET6 is defined */
|
||||||
|
#define HAVE_RES_USE_INET6 1
|
||||||
|
|
||||||
|
/* define if struct sockaddr has the sa_len member */
|
||||||
|
#define HAVE_SOCKADDR_SA_LEN 1
|
||||||
|
|
||||||
|
/* define if you have struct sockaddr_storage */
|
||||||
|
#define HAVE_SOCKADDR_STORAGE 1
|
||||||
|
|
||||||
|
/* define if unaligned memory accesses fail */
|
||||||
|
/* #undef LBL_ALIGN */
|
||||||
|
|
||||||
|
/* The successful return value from signal (?)XXX */
|
||||||
|
#define RETSIGVAL
|
||||||
|
|
||||||
|
/* Define this on IRIX */
|
||||||
|
/* #undef _BSD_SIGNALS */
|
||||||
|
|
||||||
|
/* For HP/UX ANSI compiler? */
|
||||||
|
/* #undef _HPUX_SOURCE */
|
||||||
|
|
||||||
|
/* AIX hack. */
|
||||||
|
/* #undef _SUN */
|
||||||
|
|
||||||
|
/* OSF hack: "Workaround around ip_hl vs. ip_vhl problem in netinet/ip.h" */
|
||||||
|
/* #undef __STDC__ */
|
||||||
|
|
||||||
|
/* Workaround for missing sized types */
|
||||||
|
/* XXX this should move to the more standard uint*_t */
|
||||||
|
/* #undef int16_t */
|
||||||
|
/* #undef int32_t */
|
||||||
|
/* #undef u_int16_t */
|
||||||
|
/* #undef u_int32_t */
|
||||||
|
/* #undef u_int8_t */
|
||||||
|
|
||||||
|
/* The number of bytes in a char. */
|
||||||
|
#define SIZEOF_CHAR 1
|
||||||
|
|
||||||
|
/* The number of bytes in a int. */
|
||||||
|
#define SIZEOF_INT 4
|
||||||
|
|
||||||
|
/* The number of bytes in a long. */
|
||||||
|
#define SIZEOF_LONG 4
|
||||||
|
|
||||||
|
/* The number of bytes in a short. */
|
||||||
|
#define SIZEOF_SHORT 2
|
||||||
|
|
||||||
|
/* Define if you have the ether_ntohost function. */
|
||||||
|
#define HAVE_ETHER_NTOHOST 1
|
||||||
|
|
||||||
|
/* Define if you have the getaddrinfo function. */
|
||||||
|
#define HAVE_GETADDRINFO 1
|
||||||
|
|
||||||
|
/* Define if you have the gethostbyname2 function. */
|
||||||
|
#define HAVE_GETHOSTBYNAME2 1
|
||||||
|
|
||||||
|
/* Define if you have the getnameinfo function. */
|
||||||
|
#define HAVE_GETNAMEINFO 1
|
||||||
|
|
||||||
|
/* Define if you have the inet_aton function. */
|
||||||
|
#define HAVE_INET_ATON 1
|
||||||
|
|
||||||
|
/* Define if you have the inet_ntop function. */
|
||||||
|
#define HAVE_INET_NTOP 1
|
||||||
|
|
||||||
|
/* Define if you have the inet_pton function. */
|
||||||
|
#define HAVE_INET_PTON 1
|
||||||
|
|
||||||
|
/* Define if you have the pfopen function. */
|
||||||
|
/* #undef HAVE_PFOPEN */
|
||||||
|
|
||||||
|
/* Define if you have the setlinebuf function. */
|
||||||
|
#define HAVE_SETLINEBUF 1
|
||||||
|
|
||||||
|
/* Define if you have the sigaction function. */
|
||||||
|
#define HAVE_SIGACTION 1
|
||||||
|
|
||||||
|
/* Define if you have the sigset function. */
|
||||||
|
/* #undef HAVE_SIGSET */
|
||||||
|
|
||||||
|
/* Define if you have the strcasecmp function. */
|
||||||
|
#define HAVE_STRCASECMP 1
|
||||||
|
|
||||||
|
/* Define if you have the vfprintf function. */
|
||||||
|
#define HAVE_VFPRINTF 1
|
||||||
|
|
||||||
|
/* Define if you have the <cast.h> header file. */
|
||||||
|
/* #undef HAVE_CAST_H */
|
||||||
|
|
||||||
|
/* Define if you have the <fcntl.h> header file. */
|
||||||
|
#define HAVE_FCNTL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <malloc.h> header file. */
|
||||||
|
/* #undef HAVE_MALLOC_H */
|
||||||
|
|
||||||
|
/* Define if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <net/slip.h> header file. */
|
||||||
|
#define HAVE_NET_SLIP_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <rc5.h> header file. */
|
||||||
|
/* #undef HAVE_RC5_H */
|
||||||
|
|
||||||
|
/* Define if you have the <rpc/rpcent.h> header file. */
|
||||||
|
/* #undef HAVE_RPC_RPCENT_H */
|
||||||
|
|
||||||
|
/* Define if you have the <smi.h> header file. */
|
||||||
|
/* #undef HAVE_SMI_H */
|
||||||
|
|
||||||
|
/* Define if you have the <zlib.h> header file. */
|
||||||
|
#define HAVE_ZLIB_H 1
|
||||||
|
|
||||||
|
/* Define if you have the crypto library (-lcrypto). */
|
||||||
|
/* #undef HAVE_LIBCRYPTO */
|
||||||
|
|
||||||
|
/* Define if you have the dnet library (-ldnet). */
|
||||||
|
/* #undef HAVE_LIBDNET */
|
||||||
|
|
||||||
|
/* Define if you have the resolv library (-lresolv). */
|
||||||
|
/* #undef HAVE_LIBRESOLV */
|
||||||
|
|
||||||
|
/* Define if you have the rpc library (-lrpc). */
|
||||||
|
/* #undef HAVE_LIBRPC */
|
||||||
|
|
||||||
|
/* Define if you have the smi library (-lsmi). */
|
||||||
|
/* #undef HAVE_LIBSMI */
|
||||||
|
|
||||||
|
/* Define if you have the socket library (-lsocket). */
|
||||||
|
/* #undef HAVE_LIBSOCKET */
|
||||||
|
|
||||||
|
/* Define if you have the str library (-lstr). */
|
||||||
|
/* #undef HAVE_LIBSTR */
|
||||||
|
|
||||||
|
/* Define if you have the z library (-lz). */
|
||||||
|
#define HAVE_LIBZ 1
|
Loading…
x
Reference in New Issue
Block a user