1.1 三种关键字
    关于类型的关键字
    第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
    确定传输方向的关键字
    第二种是确定传输方向的关键字,主要包括src, dst, dst or src, dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
    如果我们只需要列出送到80端口的数据包,用dst port;如果我们只希望看到返回80端口的数据包,用src port。 
        #tcpdump –i eth0 host hostname and dst port 80  目的端口是80
    或者
        #tcpdump –i eth0 host hostname and src port 80  源端口是80  一般是提供http的服务的主机
    如果条件很多的话  要在条件之前加and 或 or 或 not
        #tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80
    协议的关键字
    第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。

1.2 逻辑运算符
    除了以上三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast, less, greater,
    还有三种逻辑运算
        非运算是 'not' ,  '!'
        与运算是 'and',  '&&'
        或运算是 'or'   ,  '||'
    这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。

1.3 使用举例
    常用命令
    普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
    # tcpdump 
    tcpdump: listening on fxp0 11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
   11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43    0000 0000 0080 0000 1007 cf08 0900 0000      0e80 0000 902b 4695 0980 8701 0014 0002       000f 0000 902b 4695 0008 00
   11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97     ffff 0060 0004 ffff ffff ffff ffff ffff     0452 ffff ffff 0000 e85b 6d85 4008 0002      0640 4d41 5354 4552 5f57 4542 0000 0000    0000 00
 
    在SUSE Linux下常用抓包命令:
        #tcpdump –i eth3 port 8080 –s 0 –w test0428.cap
    说明:
        抓取网卡eth3(应用绑定IP对应)下的8080端口,每个包长不限,写到当前目录文件test0428.cap中。
        使用-i 参数指定tcpdump监听的网卡,这在计算机具有多个网卡时非常有用,
        使用-c 参数指定要监听的数据包数量,
        使用-w 参数指定将监听到的数据包写入文件中保存 。
    抓到的包,可以用Ethereal或wireshark打开。

其他示例
    A 想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
        #tcpdump host 210.27.48.1 
    B 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:
        #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 
    C 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
        #tcpdump ip host 210.27.48.1 and ! 210.27.48.2
    D 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
        #tcpdump tcp port 23 host 210.27.48.1
    E 对本机的udp 123 端口进行监视 123 为ntp的服务端口
        # tcpdump udp port 123 
    F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据: 
        #tcpdump -i eth0 src host hostname
    G 下面的命令可以监视所有送到主机hostname的数据包: 
        #tcpdump -i eth0 dst host hostname
    H  我们还可以监视通过指定网关的数据包: 
        #tcpdump -i eth0 gateway Gatewayname
    I  如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令: 
        #tcpdump -i eth0 host hostname and port 80

1.4 补充说明
    如果在ethernet 使用混杂模式 系统的日志将会记录
    May  7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.
    May  7 20:03:46 localhost kernel: device eth0 entered promiscuous mode
    May  7 20:03:57 localhost kernel: device eth0 left promiscuous mode
    tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

tcpdump详细用法的更多相关文章

  1. Tcpdump的用法

    见 超级详细Tcpdump 的用法 http://www.itshouce.com.cn/linux/linux-tcpdump.html

  2. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  3. 在DOS下的DEBUG命令的详细用法

    在DOS下的DEBUG命令的详细用法 名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump ...

  4. __declspec关键字详细用法

    __declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...

  5. CString.Format的详细用法(转)

    CString.Format的详细用法(转) 在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CS ...

  6. IFRAM的详细用法

    IFRAM的详细用法:   IFRAM的详细用法:  <IFRAME>用于设置文本或图形的浮动图文框或容器. BORDER <IFRAME BORDER="3"& ...

  7. 【转】java.util.vector中的vector的详细用法

    [转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...

  8. DOM Style样式对象的详细用法

    DOM Style样式对象的详细用法 HTML Style样式比较复杂,相应访问.修改方法也有所差异.参考相关资料,整理如下. 典型Html文件如下,有三种定义方式. <head>     ...

  9. css基础之 font的简写规则 以及 自定义 CSS3 @font-face详细用法

    Part 1 font简写 CSS的命名规则是用英文字母 数字 和下划线(一般用小写)来命名.简写css font的好处有三:一是写起来方便(就像键盘快捷键):二是简化代码:三是帮助你熟悉和深刻理解c ...

随机推荐

  1. bzoj1786

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1786 刚看上去觉得挺吓人的...... 冥冥之中我的内心深处告诉我填进去的数一定是非严格递增的 ...

  2. poj1284:欧拉函数+原根

    何为原根?由费马小定理可知 如果a于p互质 则有a^(p-1)≡1(mod p)对于任意的a是不是一定要到p-1次幂才会出现上述情况呢?显然不是,当第一次出现a^k≡1(mod p)时, 记为ep(a ...

  3. hdu 5410 CRB and His Birthday(混合背包)

    Problem Description Today is CRB's birthday. His mom decided to buy many presents for her lovely son ...

  4. 泛型 Field 和 SetField 方法 (LINQ to DataSet)

    LINQ to DataSet 为 DataRow 类提供用于访问列值的扩展方法:Field 方法和 SetField 方法.这些方法使开发人员能够更轻松地访问列值,特别是 null 值.DataSe ...

  5. Learning Lua Programming (3) iMac下搭建Lua脚本最好的编码环境(代码补全,编译运行)

    这篇文章参考自http://blog.sina.com.cn/s/blog_991afe570101rdgf.html,十分感谢原作者的伟大创造,本人亲测可行. 这篇文章记录一下如何在MAC系统环境下 ...

  6. Spring redirect直接返回项目根文件夹

    return "redirect:/";

  7. swing入门例子

    // a simple exmple that can show the basis of swing------------------------------------------------- ...

  8. 如何给你的Android 安装文件(APK)瘦身

    如何给你的Android 安装文件(APK)瘦身 本文翻译自:Putting Your APKs on Diet           原作者:Cyril Mottier Android的apk文件越来 ...

  9. [转载]C#开源项目(国外的还是很多)

    C#开源项目(国外的还是很多)一.Ajax框架Ajax.NET Professional (AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一.它在客户端脚本之上创建代理 ...

  10. TravelCMS旅游网站系统诞生记

    本人就是一纯粹码农,没什么学历,更没什么技术,但是自认为学习能力还不错,近期有一个旅游网站系统项目正在进行中,在此以贴图记录这个项目的诞生过程,本是一个定制系统,但是不想把系统做死,以通用产品的标准来 ...