前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux命令之tcpdump

Linux命令之tcpdump

作者头像
AsiaYe
发布2020-03-26 13:48:31
1K0
发布2020-03-26 13:48:31
举报
文章被收录于专栏:DBA随笔DBA随笔

//

Linux命令之tcpdump

//

基于MHA+consul的高可用方案上线已经一段时间了,目前比较稳定,之前线上环境使用的是VIP+MHA的高可用方案,这种方案在跨机房之间进行故障切换存在问题,所以现在要将服务器上的VIP(virtual IP address)给摘除掉,要摘除VIP,需要查看当前VIP是否有应用服务进行连接,这里利用到了tcpdump这个Linux命令来查看。

首先我们来看VIP的绑定效果:

代码语言:javascript
复制
[dba_mysql ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:b7:08:40 brd ff:ff:ff:ff:ff:ff
    inet 10.xx.xx.47/24 brd 10.30.124.255 scope global eth0
    inet 10.xx.xx.227/24 scope global secondary eth0

可以看到,eth0上有两个绑定IP,其中,第二个IP地址即为VIP。

01

tcpdump命令

tcpdump命令翻译过来就是dump the traffic on a network,也就是对网络上的tcp数据包进行截取分析。它支持针对网络层、协议、主机、网络或端口的过滤。该命令经常被用来进行网络分析和问题排查。它的语法比较友好,支持and、or、not等逻辑语句来帮助我们过滤掉无效的信息。不带参数的tcpdump会收集网络中所有的信息包头,数据量巨大,必须过滤

tcpdump命令的参数有很多,我们这里只看比较常用的用法,其他的可以通过man tcpdump的方法去查看操作手册。

在tcpdump的表达式中,主要包含以下关键字:

1、关于类型的

例如host(主机)、net(网络地址)、port(端口),如果没有指定类型,则缺省的类型是host

2、确定传输方向的关键字

包括src(源端),dst(目标端),dst or src,dst and src,这些关键字指明了传输的方向

3、关于协议的关键字

主要包含tcp,udp,ip,arp,rarp,如果没有知名监听的包的协议内容,tcpdump将会监听所有的包内容。

4、比较分析类关键字

例如,gateway (网关),broadcast(广播),less,greater,not,and,or等等

02

常用命令

过滤指定IP

抓取所有经过eth0,目的或源地址是192.168.1.1的网络数据

tcpdump -i eth0 host 192.168.1.1

指定源地址

tcpdump -i eth0 src host 192.168.1.1

指定目的地址

tcpdump -i eth0 dst host 192.168.1.1

过滤指定端口

抓取所有经过eth0,目的或源端口是25的网络数据

tcpdump -i eth0 port 4306

指定源端口

tcpdump -i eth0 src port 4306

指定目的端口

tcpdump -i eth0 dst port 4306

协议过滤

过滤4306端口的tcp协议

tcpdump tcp port 4306

组合过滤

过滤协议、端口、主机名称

tcpdump tcp port 3306 and host 10.30.xxx.xxx

条件过滤

抓取所有经过eth0,目的地址是192.168.1.1或192.168.1.2端口是80的TCP数据

代码语言:javascript
复制
tcpdump -i eth0 '((tcp) and (port 80) and ((dst host 192.168.1.1) or (dst host 192.168.1.2)))'

抓取所有经过eth0,目标MAC地址是00:01:02:03:04:05的ICMP数据

代码语言:javascript
复制
tcpdump -i eth0 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

抓取所有经过eth0,目的网络是192.168,但目的主机不是192.168.1.2的TCP数据

代码语言:javascript
复制
tcpdump -i eth0 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.2)))'

03

如何查询VIP的地址是否有访问?

命令如下:

tcpdump -nnn host 10.xx.xxx.xxx and port 4306

我们可以看到输出结果:

代码语言:javascript
复制
18:08:25.247002 IP 10.xx.xxx.64.54248 > 10.xx.xxx.228.4xx6: Flags [P.], seq 3167226600:3167226621, ack 3751788535, win 65535, length 21
18:08:25.247123 IP 10.xx.xxx.228.4xx6 > 10.xx.xxx.64.54248: Flags [P.], seq 1:12, ack 21, win 65535, length 11
18:08:25.247246 IP 10.xx.xxx.64.54248 > 10.xx.xxx.228.4xx6: Flags [.], ack 12, win 65535, length 0
18:08:25.247365 IP 10.xx.xxx.64.54248 > 10.xx.xxx.228.4xx6: Flags [P.], seq 21:48, ack 12, win 65535, length 27
18:08:25.247441 IP 10.xx.xxx.228.4xx6 > 10.xx.xxx.64.54248: Flags [P.], seq 12:23, ack 48, win 65535, length 11
18:08:25.247593 IP 10.xx.xxx.64.54248 > 10.xx.xxx.228.4xx6: Flags [P.], seq 48:369, ack 23, win 65535, length 321
18:08:25.248232 IP 10.xx.xxx.228.4xx6 > 10.xx.xxx.64.54248: Flags [P.], seq 23:401, ack 369, win 65535, length 378
18:08:25.248407 IP 10.xx.xxx.64.54248 > 10.xx.xxx.228.4xx6: Flags [P.], seq 369:380, ack 401, win 65535, length 11

如果这个命令有输出,则说明这块网卡上有数据访问,有三次握手情况。

如果持续一段时间没有输出,则可以判断这个IP上面没有网络数据包,就可以直接摘掉了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档