tcpdump的语法

tcpdump  转储网络上的流量
语法
        tcpdump     [-AbdDefhHIJKlLnNOpqRStuUvxX ]
                    [ -B buffer_size ]
                    [ -c count ]
                    [ -C file_size ]
                    [ -G rotate_seconds ]
                    [ -F file ]
                    [ -i interface ]
                    [ -j tstamp_type ]
                    [ -m module ]
                    [ -M secret ]
                    [ -P in | out | inout ]
                    [ -r file ]
                    [ -V file ]
                    [ -s snaplen ]
                    [ -T type ]
                    [ -w file ]
                    [ -W filecount ]
                    [ -E spi@ipaddr algo:secret,... ]
                    [ -y datalinktype ]
                    [ -z postrotate-command ]
                    [ -Z user ]
                    [ expression ]
描述
    tcpdump打印出网络接口上面匹配布尔表达式expression的包的内容的描述信息。提供 -w参数,
    tcpdump会保存包数据到一个文件中,以做以后的分析之用;如果使用了-r参数,tcpdump不会从
    网络接口读取数据包,而是从一个文件中读取,该文件是使用-w参数生成的数据包文件;使用-V
    参数,tcpdump会读取一系列数据包文件。在所有的情况下,只有使表达式expression为true的
    数据包才会被tcpdump处理。
    
    如果没有使用了-c参数,tcpdump会持续捕获数据包直到被杀死或者被使用ctrl-c中断;如果使
    用了-c参数,那么tcpdump会在捕获了count个数据包后或者被中断或者被杀死后退出。
    
    当tcpdump完成了数据包的捕获之后,他会报告以下信息:
        捕获的数据包的:这是tcpdump已经接收并且处理的数据包的数量        
        被过滤器接收的数据包的数量:该数据的意义依赖于你运行tcpdump的操作系统以及操作系统
            被配置的方式。如果过滤器是在命令行上指定的话,它代表总的数据包的数量而不论数据包
            是否匹配过滤表达式,即使数据包匹配了过滤表达式,也不管tcpdump是否已经读取并且
            处理了这些数据包;在另外一些操作系统上,它只代表匹配了过滤表达式的数据包的数量,
            而不管tcpdump是否处理了它们;在其它的一些操作系统上,它只代表匹配过滤表达式的并
            且并tcpdump处理了的数据包的数量
        被内核丢弃的数据包的数量:这是被丢弃的数据包的数量,主要是由于缓冲区空间太小,
        
    从网络接口监听数据包可能需要你具有root权限;从一个保存的数据包文件中读取数据包不需要
    root权限
    
选项
    -A    以ASCII码打印出每一个数据包(去除链路层首部)。对于捕获web页面来说很方便。
    -b    以ASDOT符号打印BGP包中的自制系统号码
    -B    设置操作系统捕获缓冲区大小为 buffer_size KB
    -c     捕获count个数据包后退出
    -C    
    -d     
    -dd
    -ddd
    -D    打印出tcpdump可以监听的网络接口的列表。对于每一个接口,打印一个号码和接口名,接口名
        和号码可以当做-i选项的参数用于指定捕获哪一个网络接口的数据包。
    -e    在输出的每一行上打印出数据链路层的首部。
    -E    
    -f
    -F    使用file文件中的内容作为过滤表达式。命令行上的过滤表达式被忽略
    -G
    -h    打印出tcpdump和libpcap的版本号以及一条有用的信息,然后退出
    -H    尝试探测802.11协议数据包头
    -i    监听端口interface。如果未指定,则监听系统接口列表中接口号码最小的接口
    -I    将网络接口置于监控模式
    -j    设置捕获时候的时间戳类型为tstamp type
    -J    列出接口支持的时间戳类型
    -K    不要尝试去验证IP,TCP,UDP的校验和
    -l    将输出缓冲
    -L    列出接口支持的数据链路类型
    -m
    -M
    -n    不要把地址转换成名字
    -N    不要打印全限定域名主机名
    -O    不要运行包匹配代码优化器。当你怀疑优化器有bug时很有用
    -p    不要将接口置于混杂模式
    -P    选择要捕获的数据包的接受/发送方向。有效值为 in,out,inout
    -R    
    -r    从file文件读取数据包(该数据包是以-w参数生成的)
    -S    打印绝对(不是相对)tcp报文段序号
    -s
    -T    将捕获的数据包强制解释为指定的类型
    -t    不要在输出行上打印时间戳
    -tt    在每一行上打印未格式化的时间戳
    -ttt    打印当前行和上一行之间的时间增量
    -tttt    在输出行上以默认格式打印时间戳
    -ttttt    打印当前行和第一行之间的时间增量
    -u    
    -U    
    -v        产生稍为详细的输出
    -vv        产生更加详细的输出
    -vvv    产生更更加详细的输出
    -V    从file文件读出一个文件名的列表
    -w    将数据包写入文件file
    -W    和-C配合使用
    -x    当解析和输出的时候,除了打印每一个包的包头,也以十六进制打印每一个包的数据(去掉
        数据链路层的首部)。
    -xx        当解析和输出的时候,除了打印每一个包的首部,也打印每一个包的数据,包括数据链路
            层的首部,以十六进制打印。
    -X    以十六进制和ASCII打印每个包的首部和数据,去除数据链路层的首部
    -XX        同上,不过也打印数据链路层的首部
    -y    
    -z
    -Z    切换用户
    expression
        选择转储哪一个包。如果没有使用expression,网络上所有的包都被转储。否则,只有使
        expression为true的包才会被转储。过滤表达式的语法在下面介绍。

过滤表达式
    过滤表达式包含一个或者多个primotives(原语)。primitive通常包含一个id(名字或者数字),
    id的前面是一个或者多个限定词。有三种类型的限定词:
    type    type限定词说明了id指的是哪一种数据。可能的types有 host,net,port,和
            portrange。例如,host foo,net 128.3,port 20,portrange 6000-8000.如果没有
            type限定词,那么假定限定词是host。
    dir        dir限定词指定了数据包相对于id的传输方向。可能的方向有src,dst,src or dst,
            src and dst,ra,ta,addr1,addr2,addr3,addr4.例如:src foo,dst net 128.3
            如果没有dir限定词,假定dir限定词是src or dst。限定词ra,ta,addr1,addr2,
            addr3,addr4只对IEEE 802.11无线网有效。
    proto    proto限定词限定匹配到某一个特别的协议。可能的协议有:ether,fddi,tr,wlan,
            ip,ip6,arp,rarp,decnet,tcp,udp。例如:ether src foo,arp net 128.3
            如果没有指定proto限定词,假定所有的协议都可以。
            
    除了以上的以外,还有一些特殊的primitive关键字,这些关键字不符合以上模型:gateway,
    broadcast,less,greater和算术表达式。
    更复杂的过滤表达式可以使用关键字and,or和not去组合primitive。例如:
    host foo and not port ftp-data。
    允许的primitive有:
    dst host (host)
        如果数据包的目的ip是(host),(host)可以是一个地址或者名字。该表达式为true
    src host  (host)
        同上,不过是源ip地址
    host (host)
        如果数据包的源ip或者目的ip是host那么该表达式为true。
        以上三个host表达式都可以在前面加上以下关键字:ip,arp,rarp,或者ip6
    ether dst (ehost)
        如果数据帧的以太网卡目的地址为ehost,则该表达式为真,ehost或者是一个/etc/ethers
        里面的名字或者是一个数字网卡地址。
    ether src (ehost)
    ether host (ehost)
        如果捕获的数据帧的目的或源网卡地址是ehost,则该表达式为true。
    gateway (host)
    dst net (net)
        如果数据包的ip地址的网络号是net,则表达式为true。
    src net (net)
    net (net)
    net (net) mask (netmask)
    net (net/len)
    dst port (port)
        如果数据包的目的端口号是port,为true。
    src port (port)
    port (port)
    dst portrange (port1-port2)
    src portrange (port1-port2)
    portrange (port1-port2)
        如果数据包的目的端口或者源端口的范围在port1到port2之间,那么该表达式为true
        以上所有与port有关的表达式都可以在前面加上tcp或者udp。那样的话就只匹配tcp报文段
        或者udp数据报。
    less (length)
    len <= (length)
        如果数据帧的长度小于等于length,该表达式为真。
    greater (length)
    len >= (length)
    ip proto (protocol)
        如果数据帧是一个ip数据包,ip的协议字段的协议是protocol,该表达式为真。可能的
        protocol是icmp,igmp,icmp6,igrp,pim,ah,esp,vrrp,udp,或者tcp。注意
        协议tcp,udp,和icmp同样是关键字,因此必须在他们的前面加上反斜杠。在cshell中
        应该加上两个反斜杠。
    ...
    ...
    ...
    primitive可能使用一些运算符组合在一起:
        括弧
        取反(!或者not)
        相与(&&或者and)
        相或(||或者or)
    取反优先级最高。与运算和或运算具有相同的优先级和自左至右的结合性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值