• Tcpdump使用方法总结


    1 -- Tcpdump简介

    本文跟踪Tcpdump最新版本,不定期更新选项解析和使用方法,截至目前(2014.01.28),Tcpdump的最新版本是:tcpdump4.5.1和libpcap1.5.3。

    root@motadou:/home/motadou/apps/tcpdump/sbin# tcpdump -h
    tcpdump version 4.5.1
    libpcap version 1.5.3
    Usage: tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]
                   [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                   [ -i interface ] [ -j tstamptype ] [ -M secret ]
                   [ -P in|out|inout ]
                   [ -r file ] [ -s snaplen ] [ -T type ] [ -V file ] [ -w file ]
                   [ -W filecount ] [ -y datalinktype ] [ -z command ]
                   [ -Z user ] [ expression ]
    2 -- Tcpdump选项函数说明
    选项 说明
    -a 将网络地址和广播地址转变成名字
    -A 以ASCII格式打印出所有分组,并将链路层的头最小化
    -c count 指定数据包的监听数量,当收到指定的包数量后,Tcpdump自动退出
    -C file_size 在将原始数据包写入文件之前,检查数据文件的大小,如果当前数据文件大于指定的file_size,Tcpdump将关闭当前文件,并重新创建一个编号紧随上个文件编号的新数据文件。该选项需要配合-w选项一起使用。必须注意file_size的单位是百万字节(1000000字节,而不是1048576字节)。
    -d 数据包的过滤条件经编译后,将其内部格式代码,以人们能够理解的汇编格式输出
    -dd 数据包的过滤条件经编译后,将其内部格式代码,以C语言程序段的格式输出
    -ddd 数据包的过滤条件经编译后,将其内部格式代码,以十进制的格式输出
    -e 在输出行打印出数据链路层MAC地址等头部信息。该参数可以用来打印以太网或者IEEE 802.11等协议物理链路层的地址。
    -n 不将地址(比如:主机地址、端口号)的数字表示形式转换成名字表示。
    -s snaplen 从每个报文中截取snaplen字节的数据,而不是缺省的65535。如果我们指定过小的snaplen值,获取的数据报将被截断(亦即我们获得的不是一个完整的数据报,只是原始数据报的一部分),在输出行中会有类似[|proto]这样的输出,这里的proto是截断发生处的协议层名称。注意,采用更大的捕捉范围既增加了处理报文的时间,又相应的减少了报文的缓冲数量,可能导致报文的丢失。你应该把snaplen设的尽量小,只要能够容纳你需要的协议信息就可以了。设置snaplen参数值为0,即是设置为默认值65535。

    如果指定只获取数据报前10个字节,在输出时,会表明该数据包在以太网链路层数据被截断了:
    root@motadou:~# tcpdump -i eth0 -n -t -s 10
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 10 bytes
    [|ether]
    [|ether]
    如果指定只获取数据报前20个字节,在输出时,会表明该数据包在IP层数据被截断了:
    root@motadou:~# tcpdump -i eth0 -n -t -s 20
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 20 bytes
    IP [|ip] IP [|ip]
    -t 在每个输出行都不打印时间戳。
    不使用该参数的输出行如下所示:
    root@motadou:~# tcpdump -i eth0 -n
    22:47:37.815859 IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1021826231:1021826427, ack 2432753, win 262, length 196
    使用该参数后的输出行如下所示:
    root@motadou:~# tcpdump -i eth0 -n -t
    IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1021826231:1021826427, ack 2432753, win 262, length 196
    -tt 在每个输出行打印非格式化的时间戳,格式为:UNIX时间戳.毫秒数

    格式化时间戳的输出行如下所示:
    root@motadou:~# tcpdump -i eth0 -n
    20:23:59.519824 IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1021787799:1021787995, ack 2428345, win 254, length 196
    20:23:59.520223 IP 192.168.1.101.54931 > 192.168.1.104.22: Flags [.], ack 196, win 3931, length 0
    
    非格式化的时间戳输出行如下所示:
    root@motadou:~# tcpdump -i eth0 -tt
    1391172027.174475 IP motadou.local.ssh > 192.168.1.101.54931: Flags [P.], seq 1021799219:1021799415, ack 2429125, win 254, length 196
    1391172027.174822 IP 192.168.1.101.54931 > motadou.local.ssh: Flags [.], ack 196, win 3944, length 0
    -ttt 打印出当前输出行据上次输出所经历的时间间隔,其时间单位是毫秒。输出如下所示:
    root@motadou:~# tcpdump -i eth0 -n -ttt
    00:00:00.000016 IP 192.168.1.104.22 > 192.168.1.101.54931: Flags [P.], seq 1256:1372, ack 1, win 254, length 116
    00:00:00.000196 IP 192.168.1.101.54931 > 192.168.1.104.22: Flags [.], ack 1060, win 3978, length 0
    00:00:00.000090 IP 192.168.1.101.54931 > 192.168.1.104.22: Flags [.], ack 1372, win 3900, length 0
    00:00:00.037288 IP 192.168.1.1.2049 > 239.255.255.250.1900: UDP, length 327
    3 -- Tcpdump过滤表达式说明
    4 -- Tcpdump使用示例

    建立连接的过程
    客户端主动关闭的情况/服务端主动关闭的情况(注意各端的链接状态)
    accept返回前连接夭折
    服务器进程终止,客户端再发送数据的状态
    服务器主机崩溃
    服务器主机关机

  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/motadou/p/1599375.html
Copyright © 2020-2023  润新知