tcpdump移植和使用 -- by Johnson

1. 概述
tcpdump是一个用于抓取网络数据包的命令行工具,与带界面的Wireshark一样,基于libpcap库构建。
tcpdump的设计目标是帮你分析包头(比如Tcp包头,udp包头),同时你可以根据包头,用它支持的表达式,过渡出你感兴趣的包,从而方便你自己处理包中数据

2.移植
分为下面三步:
1)设置环境变量:
a. vi configure.env
b. 输入以下内容:
ARCH=xxxxxx    #xxxxx为你的编译器目录
    CC=${ARCH}-gcc
    CXX=${ARCH}-g++
    AR=${ARCH}-ar

    export ARCH
    export CC
    export CXX
    export AR
c. 保存后,配置当前shell:
source configure.env

2)移植libpcap
a. 下载libpcap-1.0.0.tar.gz;
b. 解压:
tar xvf libpcap-1.0.0.tar.gz
c. 进入解压后的libpcap-1.0.0目录,配置项目:
ac_cv_linux_vers = 2.6.35 ./configure -host=arm-linux --with-pcap=linux --prefix=xxxxxx    #2.6.35为目标linux版本,xxxxxx为你想安装的位置
d.编译、安装:
make; make install

3)移植tcpdump
a.下载tcpdump-4.0.0.tar.gz;
b.解压:
tar xvf tcpdump-4.0.0.tar.gz
c.进入解压后的tcpdump-4.0.0目录,配置项目:
ac_cv_linux_vers = 2.6.35 ./configure -host=arm-linux --prefix=xxxxxx    #选项含义同上
d.编译:
make;     #此步骤会提示"undefined reference to 'ip6_print'"
e.注释掉print-enc.c文件中的下面这段:
case AF_INET6:
       ip6_print(p, length);
       break;
f.编译、安装:
make; make install    #完成后,可以安装目录的sbin中找到tcpdump

3.使用
1)使用格式如下:
命令    [无参数标志] [有参数标志] [表达式]

Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
		[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
		[ -i interface ] [ -M secret ] [ -r file ]
		[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]
		[ -y datalinktype ] [ -z command ] [ -Z user ]
		[ expression ]
2)常用标志:
-x    #打印数据的16进制值,每行16个字节
-X    #同上,还在每行右边显示对应的ASCII的值,如果值可显示的话
-s 0    #打印时,包括包中的数据,默认只打包的帧头(比如:tcp的帧头)

3)常用表达式
a. 单个表达式间存在空格时,要用引号包起来
b. 表达式间要用and/or/not连接起来

src/dst    #指定下一个参数(host/net/port) 作用于本地,或是远程
host/net 192.168.1.150   #指定我们关心的主机、IP等
tcp/udp    port    3333    #指定我们关心的tcp或udp端口
and or not    #表达式间的与、或、非
& || !    #表达式内部的与、或、非

c.示例
./tcpdump -X -s 0 host 192.168.1.153 and "tcp[tcpflags] & tcp-push != 0" and src port 3333
#抓住所有从192.168.1.153的3333端口发过来的tcp数据包(不要同步包、结束包等),并将包头和数据的16进制值与ASCII值打印到控制台

4)详细使用说明




资源优化配置,就是将时间花在珍惜你时间的人身上
原文地址:https://www.cnblogs.com/littleblackbox/p/4289922.html