tcpdump使用示例
前言
这段时间一直在研究kubernetes当中的网络, 包括通过keepalived来实现VIP的高可用时常常不得不排查一些网络方面的问题, 在这里顺道梳理一下tcpdump的使用姿势, 若有写的不好的地方, 欢迎各位道友扔砖头.
**注: **
示例环境为一套kubernetes集群, 包括k8s master node及k8s work node, 均为VM
- 查看tcpdump可以进行抓包的网络接口
[root@10-10-40-110 ~]# tcpdump -D
1.eth0
2.docker0
3.cni0
4.vethd0fd7a3f
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.eth1
8.flannel.1
9.usbmon1 (USB bus number 1)
10.vetha5e14de7
11.veth5b9890d0
12.vethf6e5a39c
13.veth59af7cc7
14.vethf98a2823
15.veth628e2234
16.veth861a08f6
17.veth0912b7b6
18.vethf2889e2b
19.vethd7109cca
20.veth421502a4
21.vethf561756e
22.any (Pseudo-device that captures on all interfaces)
23.lo [Loopback]
[root@10-10-40-110 ~]#
- 对eth0网络接口进行抓包
[root@10-10-40-110 ~]# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
- 对所有接口进行抓包(需要进入混杂模式, Linux kernel >= 2.2)
[root@10-10-40-110 ~]# tcpdump -i any
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
- 以详细输出的方式进行抓包
注: 不加接口参数的话默认监听第一个网络接口, 该环境下为eth0
[root@10-10-40-110 ~]# tcpdump -v
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
- 以更加详细输出的方式进行抓包
[root@10-10-40-110 ~]# tcpdump -vv
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
- 以最详细输出的方式进行抓包
[root@10-10-40-110 ~]# tcpdump -vvv
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:03:19.298070 IP (tos 0x12,ECT(0), ttl 64, id 7354, offset 0, flags [DF], proto TCP (6), length 176)
- 以详细输出的方式进行抓包并将数据包以十六进制和ASCII方式打印输出, 除了link level header
[root@10-10-40-110 ~]# tcpdump -v -X
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:04:46.063040 IP (tos 0x12,ECT(0), ttl 64, id 19261, offset 0, flags [DF], proto TCP (6), length 176)
- 以详细输出的方式进行抓包并将数据包以十六进制和ASCII方式打印输出, 包括link level header
[root@10-10-40-110 ~]# tcpdump -v -XX
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:40:45.439798 IP (tos 0x12,ECT(0), ttl 64, id 34723, offset 0, flags [DF], proto TCP (6), length 176)
- 安静模式进行抓包(输出比默认模式要少)
[root@10-10-40-110 ~]# tcpdump -q
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
- 限定抓取的数据包个数
[root@10-10-40-110 ~]# tcpdump -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:49:00.612030 IP 10-10-40-110.ssh > 121.121.0.65.54289: Flags [P.], seq 2802886126:2802886314, ack 3182814556, win 1432, options [nop,nop,TS val 454928787 ecr 807548508], length 188
21:49:00.612519 IP 10-10-40-110.44078 > public1.114dns.com.domain: 11925+ PTR? 65.0.121.121.in-addr.arpa. (43)
21:49:00.623275 IP public1.114dns.com.domain > 10-10-40-110.44078: 11925 NXDomain 0/1/0 (106)
21:49:00.624629 IP 10-10-40-110.51033 > public1.114dns.com.domain: 25277+ PTR? 110.40.10.10.in-addr.arpa. (43)
21:49:00.635649 IP public1.114dns.com.domain > 10-10-40-110.51033: 25277 NXDomain* 0/1/0 (78)
21:49:00.635906 IP 10-10-40-110.39356 > public1.114dns.com.domain: 9087+ PTR? 114.114.114.114.in-addr.arpa. (46)
21:49:00.635952 IP 10-10-40-110.ssh > 121.121.0.65.54289: Flags [P.], seq 188:408, ack 1, win 1432, options [nop,nop,TS val 454928811 ecr 807548508], length 220
21:49:00.644312 IP 121.121.0.65.54289 > 10-10-40-110.ssh: Flags [.], ack 188, win 32762, options [nop,nop,TS val 807549151 ecr 454928787], length 0
21:49:00.646272 IP public1.114dns.com.domain > 10-10-40-110.39356: 9087 1/0/0 PTR public1.114dns.com. (78)
21:49:00.646443 IP 10-10-40-110.ssh > 121.121.0.65.54289: Flags [P.], seq 408:1396, ack 1, win 1432, options [nop,nop,TS val 454928821 ecr 807549151], length 988
10 packets captured
10 packets received by filter
0 packets dropped by kernel
[root@10-10-40-110 ~]#
- 将抓取的数据保存到文件, 文件后缀为
.cap
注: 若想将数据保存到文件, 同时又想查看终端输出, 可以结合
tee命令和管道使用tcpdump | tee > capture.cap
[root@10-10-40-110 ~]# tcpdump -c 10 -w capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
[root@10-10-40-110 ~]#
查看文件类型
[root@10-10-40-110 ~]# file capture.cap
capture.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)
[root@10-10-40-110 ~]#
直接通过cat查看是没法看的, 全是一堆乱码, 若想查看保存的.cap文件的内容, 可以通过tcpdump -r读取
- 读取保存的cap文件
[root@10-10-40-110 ~]# tcpdump -r capture.cap
reading from file capture.cap, link-type EN10MB (Ethernet)
21:51:09.223140 IP 10-10-40-110.ssh > 121.121.0.65.54289: Flags [P.], seq 2802890002:2802890126, ack 3182816820, win 1432, options [nop,nop,TS val 455057398 ecr 807672709], length 124
21:51:09.596238 IP 121.121.0.65.54289 > 10-10-40-110.ssh: Flags [.], ack 124, win 32764, options [nop,nop,TS val 807673597 ecr 455057398], length 0
21:51:09.732159 IP 10.10.40.103 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 220, authtype simple, intvl 1s, length 20
21:51:10.732853 IP 10.10.40.103 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 220, authtype simple, intvl 1s, length 20
21:51:10.841674 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 102
21:51:11.055641 ARP, Request who-has 10-10-40-110 tell 10.10.40.2, length 28
21:51:11.055657 ARP, Reply 10-10-40-110 is-at fa:8a:41:0f:73:00 (oui Unknown), length 28
21:51:11.733994 IP 10.10.40.103 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 220, authtype simple, intvl 1s, length 20
21:51:12.735129 IP 10.10.40.103 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 220, authtype simple, intvl 1s, length 20
21:51:12.841619 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 102
[root@10-10-40-110 ~]#
- 以最详细的方式读取保存的抓包数据
[root@10-10-40-110 ~]# tcpdump -vvv -r capture.cap
- 以IP加端口的方式展示而不是以域名和服务名称的方式展示(有些系统需要指定-nn参数来显示端口号)
[root@10-10-40-110 ~]# tcpdump -nn
- 抓取目标主机为10.10.40.200的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn dst host 10.10.40.200
- 抓取源端主机为10.10.40.200的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn src host 10.10.40.200
- 抓取源端或者目标端主机为10.10.40.200的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn host 10.10.40.200
- 抓取所有目标网络为10.10.40.0/24的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn dst net 10.10.40.0/24
- 抓取所有源端网络为10.10.40.0/24的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn src net 10.10.40.0/24
- 抓取所有源端网络为10.10.40.0/24或者目标网络为10.10.40.0/24的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn net 10.10.40.0/24
- 抓取所有目标端口为22的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn dst port 22
- 抓取所有目标端口在1-1023范围内的所有数据包
[root@10-10-40-110 ~]# tcpdump -nn dst portrange 1-1023
- 抓取所有目标端口范围为1-1023的TCP报文
[root@10-10-40-110 ~]# tcpdump -nn tcp dst portrange 1-1023
- 抓取所有目标端口范围为1-1023的UDP报文
[root@10-10-40-110 ~]# tcpdump -nn udp dst portrange 1-1023
- 抓取目标主机为10.10.40.200且目标端口为22的所有报文
[root@10-10-40-110 ~]# tcpdump -nn "dst host 10.10.40.200 and dst port 22"
- 抓取目标主机为10.10.40.200且目标端口为22或者443的所有报文
[root@10-10-40-200 ~]# tcpdump -nn dst "host 10.10.40.200 and (dst port 22 or dst port 443)"
- 抓取所有的ICMP报文
icmp可以替换成其他的协议, 如arp / tcp / udp / vrrp等
[root@10-10-40-110 ~]# tcpdump -nn -v icmp
- 抓取所有的ARP或者ICMP报文
[root@10-10-40-110 ~]# tcpdump -nn -v "icmp or arp"
- 抓取所有的广播或者多播报文
[root@10-10-40-110 ~]# tcpdump -nn "multicast or broadcast"
- 指定抓取数据包的大小(Byte)
为0表示不限制
[root@10-10-40-110 ~]# tcpdump -nn icmp -s 100
- 结束抓包
通常情况下按
Ctl+C需要过很长时间才能够退出tcpdump, 这个时候可以采用Ctl+\的方式强制退出程序
参考
tcpdump使用示例的更多相关文章
- Linux tcpdump 命令详解与示例
命令概要 Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的.TcpDump 是 Linux 中强大的网络数据采集分析工具之一. 用简单的话来定义tcpdump,就是:du ...
- Linux下通过tcpdump抓包工具获取信息
介绍 tcpdump是网络数据包截获分析工具.支持针对网络层.协议.主机.网络或端口的过滤.并提供and.or.not等逻辑语句帮助去除无用的信息. tcpdump - dump traffic on ...
- monitor a local unix domain socket like tcpdump
Can I monitor a local unix domain socket like tcpdump? - Super User https://superuser.com/questions/ ...
- linux网络相关命令使用
A,iptables使用示例 1,将请求80端口的包发送给本机8180端口(这样,别的机器访问本机的80端口时会被转发到8180端口去) iptables -t nat -A PREROUTING - ...
- linux使用tcpdump抓包工具抓取网络数据包,多示例演示
tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...
- Linux使用tcpdump抓取网络数据包示例
tcpdump是Linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...
- tcpdump抓包指令使用示例
tcpdump是一个用于截取网络分组,并输出分组内容的工具. tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具.tcpdump提供了源代码,公开了 ...
- tcpdump示例
今天有需求要用tcpdump,给一个我使用的例子: sudo /usr/sbin/tcpdump dst 10.20.137.24 and tcp port 8080 -A -s0 -w nous ...
- 在php中使用strace、gdb、tcpdump调试工具
[转] http://www.syyong.com/php/Using-strace-GDB-and-tcpdump-debugging-tools-in-PHP.html 在php中我们最常使用调试 ...
随机推荐
- IDEA如何自动提示并补全syso和main呢?
myeclipse使用若干年了,syso和main也被打过无数遍,切换到IDEA开发工具中,一按,天啦,竟然没有自动补全,顿时觉得IDEA弱爆了,经过摸索之后,IDEA终结没有令人失望.可以通过配置L ...
- How to get API key (APPID)
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- Hadoop生态圈-Oozie实战之调度shell脚本
Hadoop生态圈-Oozie实战之调度shell脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客展示案例:使用Oozie调度Shell脚本. 1>.解压官方案例 ...
- Python基础【day03】:字典(一)
本节内容 简述 语法 字典的使用 字典内置方法 一.简述 字典是Python中的又一种数据结构,它是通过key-value的数据类型,跟我们小时候用的新华字典差不多,通过key去访问value 二.语 ...
- Hbase记录-Hbase shell使用命令
1.进入hbase shell 执行./bin/hbase shell 2.进入后,help 帮助信息,如可以使用help 'create' 3.创建表:create 'test','cf' 表 ...
- SqlServer中的查询简单总结
一.sql语句的执行顺序 查询时数据库中使用最多的操作,一条sql语句的查询顺序是 1.from Tb1 [ join on ] 得到查询的数据源 2.where 对数据过滤(单条数据上过滤 ...
- Spring面向切面编程AOP(around)实战
spring aop的环绕通知around功能强大,我们这里就不细说,直接上代码,看着注释就能明白 需要的可以点击下载源码 1.如果使用注解的方式则需要先创建个注解类 package com.mb.a ...
- 按某个属性排序(字典序,ascII) js/python
javascrapy方法 var compare = (prop)=>{ return (a,b)=>{ : - } } javascrapy测试代码 var aaa = [ {name: ...
- 表格重新加载 where 携带上次值问题
表格重载两种方式: 方式一: tableIns.reload(options) 注意这种方式的重载是不会携带上次数据加载时的where值 //使用 第一次渲染返回的对象 var table ...
- caffe 中 python 数据层
caffe中大多数层用C++写成. 但是对于自己数据的输入要写对应的输入层,比如你要去图像中的一部分,不能用LMDB,或者你的label 需要特殊的标记. 这时候就需要用python 写一个输入层. ...