tcpdump命令参数说明和使用实例、linux解析公网地址会卡顿一下解决方法

tcpdump

cpdump 是 Linux 下的抓包工具,使用参数比较多,输出条目比较细。

  • tcpdump语法:
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
               [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
               [ -T 类型 ] [ -w 文件名 ] [表达式 ]

tcpdump的参数选项

  • 参数和说明如下
    • -A:以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便;
    • -a:将网络地址和广播地址转变成名字;
    • -c<数据包数目>:在收到指定的包的数目后,tcpdump就会停止;
    • -C:用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加);
    • -d:将匹配信息包的代码以人们能够理解的汇编格式给出;
    • -dd:将匹配信息包的代码以c语言程序段的格式给出;
    • -ddd:将匹配信息包的代码以十进制的形式给出;
    • -D:列出当前主机的所有网卡编号和名称,可以用于选项 -i;
    • -e:在输出行打印出数据链路层的头部信息;
    • -f:将外部的Internet地址以数字的形式打印出来;
    • -F<表达文件>:从指定的文件中读取表达式,忽略其它的表达式;
    • -i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡;
    • -l:如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认);
    • -n:显示ip,而不是主机名;
    • -nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
    • -N:不列出域名;
    • -O:不将数据包编码最佳化;
    • -p:不让网络界面进入混杂模式;
    • -q:快速输出,仅列出少数的传输协议信息;
    • -r<数据包文件>:从指定的文件中读取包(这些包一般通过-w选项产生);
    • -s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失;
    • -S:用绝对而非相对数值列出TCP关联数;
    • -t:在输出的每一行不打印时间戳;
    • -tt:在输出的每一行显示未经格式化的时间戳记;
    • -T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议);
    • -v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
    • -vv:输出详细的报文信息;
    • -x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册;
    • -w<数据包文件>:直接将包写入文件中,并不分析和打印出来;
    • expression:用于筛选的逻辑表达式;

基本返回值查看

  • 如我执行如下获取eth1网卡中与baidu.com有关的流量【需要另外打开一个窗口执行ping baidu.com
    大概参数说明看下面
[root@xz-own-httpfxdl-01 ~]# tcpdump -i eth1 host baidu.com  -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes

时间:时分秒           源ip             目的IP       协议       请求     ID编号      数量

17:50:31.716580 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 1, length 64
17:50:31.777902 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 1, length 64
17:50:32.717662 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 2, length 64
17:50:32.778671 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 2, length 64
17:50:33.719080 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 3, length 64
17:50:33.780053 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 3, length 64
17:50:34.720160 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 4, length 64
17:50:34.781057 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 4, length 64
17:50:35.721342 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 5, length 64
17:50:35.782349 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 5, length 64
17:50:36.722542 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 6, length 64
17:50:36.783785 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 6, length 64
17:50:37.723997 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 7, length 64
17:50:37.784894 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 7, length 64
17:50:38.725299 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 8, length 64
17:50:38.786279 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 8, length 64


获取任意参数并按下 `ctrl+c` 之后结束
^C
16 packets captured   捉取下来的数据包数量
27 packets received by filter    由过滤所得的总数据包数量
0 packets dropped by kernel    被核心所丢弃的数据包
[root@xz-own-httpfxdl-01 ~]#

基本用法

抓取指定网络接口的所有流量

  • tcpdump -i eth1 -nn
    • -i后面跟网卡名称
    • -nn是输出打印【不加-nn就不会有输出内容,直到ctrl+C结束】
[root@xz-own-httpfxdl-01 ~]# tcpdump -i eth1 -nn
....
17:40:30.977305 IP 118.31.44.10.60478 > 111.11.199.117.18081: Flags [.], ack 348, win 237, options [nop,nop,TS val 564692842 ecr 1112591151], length 0
17:40:30.977368 IP 118.31.44.10.60478 > 111.11.199.117.18081: Flags [F.], seq 1110, ack 349, win 237, options [nop,nop,TS val 564692842 ecr 1112591151], length 0
17:40:30.977389 IP 111.11.199.117.18081 > 118.31.44.10.60478: Flags [.], ack 1111, win 244, options [nop,nop,TS val 1112591234 ecr 564692842], length 0
^C
817 packets captured
818 packets received by filter
0 packets dropped by kernel
[root@xz-own-httpfxdl-01 ~]#

抓取指定网络接口指定主机地址【IP/域名】的所有流量

  • tcpdump -i eth1 host baidu.com -nn【需要另外打开一个窗口执行ping baidu.com
    • 注:tcpdump -i eth1 net baidu.com -nn host【主机地址】可以换为net【网络地址】,具体有啥区别,感兴趣自己测吧,我是用host的。
    • -i 后面网络接口
    • host可以是IP,也可以是域名,如我这就用的域名
    • -nn是输出
[root@xz-own-httpfxdl-01 ~]# tcpdump -i eth1 host baidu.com  -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
17:50:31.716580 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 1, length 64
17:50:31.777902 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 1, length 64
17:50:32.717662 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 2, length 64
17:50:32.778671 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 2, length 64
17:50:33.719080 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 3, length 64
17:50:33.780053 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 3, length 64
17:50:34.720160 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 4, length 64
17:50:34.781057 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 4, length 64
17:50:35.721342 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 5, length 64
17:50:35.782349 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 5, length 64
17:50:36.722542 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 6, length 64
17:50:36.783785 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 6, length 64
17:50:37.723997 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 7, length 64
17:50:37.784894 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 7, length 64
17:50:38.725299 IP 111.11.199.117 > 39.156.66.10: ICMP echo request, id 24497, seq 8, length 64
17:50:38.786279 IP 39.156.66.10 > 111.11.199.117: ICMP echo reply, id 24497, seq 8, length 64
^C
16 packets captured   
27 packets received by filter    
0 packets dropped by kernel    
[root@xz-own-httpfxdl-01 ~]#

只取出端口 3333 的联机数据包

  • tcpdump -i eth0 -nn port 3333
    • port 后面跟端口
    • 额 好像没啥测试的,我ssh
[root@xz-own-httpfxdl-01 ~]# tcpdump -i eth1 -nn port 3333
17:57:38.257344 IP 111.11.199.117.3333 > 211.139.70.92.21901: Flags [P.], seq 430192:430348, ack 37, win 261, length 156
17:57:38.258164 IP 211.139.70.92.21901 > 111.11.199.117.3333: Flags [P.], seq 37:73, ack 428840, win 513, length 36
^C
2864 packets captured
2868 packets received by filter
0 packets dropped by kernel

获取指定协议的数据包【如udp】

  • tcpdump -i eth0 nn tcp
    • -i 后面网络接口
    • -nn是输出
    • tcp是协议,还包括fddi,ip,arp,rarp,tcp,udp,imcp
[root@xz-own-httpfxdl-01 ~]# tcpdump -i eth1 -nn tcp
...
^c
1862 packets captured
1862 packets received by filter
0 packets dropped by kernel

在网口eth1上抓取源端口为80且目的端口为6100的数据包

  • tcpdump -i eth1 src port 80 and dst port 6100
    • -i 后面是网络接口
    • src port 80 源端口
    • dst port 6100 目的端口
    • 不测试了,没有这种场景,用不同的端口是方便理解

进阶用法【关系运算符】

  • 实际上,tcpdump主要包括三种类型的关键字

    • 第一种是关于类型的关键字,主要包括host,net,port
    • 第二种是确定传输方向的关键字,主要包括src,dst,src or dst,src and dst,这些关键字指明了传输的方向。
    • 第三种是协议关键字,包括fddi,ip,arp,rarp,tcp,udp,imcp等,如上面的例。
  • 除了这三种类型的关键字外,还有其他重要的关键字,如:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是not!,与运算符是and&&,或运算符是or||,这些关键字可以组合起来构成强大的组合条件来满足我们的需求。

抓取网口eth0上192.168.0.250与除192.168.0.74外的其他主机之间的icmp报文

tcpdump -i eth0 -s 1400 -nn host 192.168.0.250 and ! 192.168.0.74 and icmp -e

抓取网口eth0上192.168.0.250与除192.168.0.74外的所有tcp数据包

这里用到了括号,注意,在tcpdump中使用括号时必须用转义

tcpdump -i eth0 -s 1400 -nn tcp and \(host 192.168.0.250 and ! 192.168.0.74\)

抓取网口eth0上源mac地址或目的mac地址为00:21:85:6C:D9:A3的所有数据包

注意,这里的mac地址格式必须以:分隔。
tcpdump -i eth0 ether src or dst 00:21:85:6C:D9:A3

linux解析公网地址会卡顿一下解决方法

问题说明

  • 主机出公网的时候,刚开始会卡5秒,后面就一切正常。如下我开启抓包,新开一个窗口ping的时候,开始会卡5秒【多次执行都是一样,每次都是刚刚好卡5秒】
    在这里插入图片描述
  • 试了很多方法没解决,网络上也看了没啥问题,就很奇怪。 最后发现如果我将域名和IP添加到/etc/hosts中的话,ping域名就不会卡了,所以问题应该是出在解析上的。

解决方法

  • 很简单——给DNS解析配置文件中添加一行nameserver 127.0.0.1本地解析即可~~
    就是这么简单,搞得我怀疑人生。
[root@xz-own-httpfxdl-01 ~]# cat /etc/resolv.conf
#; generated by /usr/sbin/dhclient-script
#search openstacklocal novalocal
nameserver 127.0.0.1
nameserver 114.114.114.114
nameserver 10.233.3.11
[root@xz-own-httpfxdl-01 ~]#

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cuichongxin/article/details/129672294