资讯专栏INFORMATION COLUMN

tcpdump抓包mysql建联验证TCP的三次握手

QiuyueZhong / 2365人阅读

摘要:除了黑客,网络管理员也应该学会使用嗅探器来随时掌握网络的使用情况,在网络性能急剧下降时,找到网络阻塞和问题的根源。

TCP的三次握手、4次挥手是老生常谈的东西,那么具体的包数据传输过程你是否真正的试过呢?我们今天就通过具体的mysql建联实践来看看是怎么传递数据包的。

网络嗅探器和tcpdump

在共享式的网络中,数据的传输是怎么完成的呢?又是怎么找到对应的机器来进行数据交互的呢?

一般来说,在网络中,信息报会广播到网络中所有主机的网络接口,主机的网络设备通过IP和MAC地址等信息判断该信息包是否应该接收,通过抛弃与自己无关的数据包,这样就达到互联网中我们与指定机器通信的目的。

但是在众多的黑客技术中,嗅探器(sniffer)是一种很常见的技术,它使主机的网络设备接收所有到达的信息包,从而达到网络监听的目的。在共享式的局域网中,嗅探器可以对该网络中的流量一览无余。除了黑客,网络管理员也应该学会使用嗅探器来随时掌握网络的使用情况,在网络性能急剧下降时,找到网络阻塞和问题的根源。

具体的嗅探器工具在Windows平台上有netxraysniffer pro软件,在Linux平台上有tcpdump。我们今天要介绍的就是tcpdump sniffer嗅探器工具。

安装tcpdump

tcpdumpLinux平台一个以命令行方式运行的网络流量检测工具,它能截获网卡上收到的数据包,并通过一定的配置来完成对内容的解析和分析。

检测系统中是否已经安装了tcpdump的方法非常简单,就是直接执行:

$ tcpdump
# 如果没有安装
tcpdump: no suitable device found
# 如果已经安装,则当有网络请求时会出现许多的这种网络解析数据
21:44:14.109590 IP client.host > server.host: Flags [P.], seq 1031520:1031984, ack 1393, win 95, options [nop,nop,TS val 2242702304 ecr 3381086780], length 464

最新的tcpdump源码下载地址:http://www.tcpdump.org (tcpdump官网)

tcpdump的运行需要pcap的支持,请同时下载这两个内容并安装,一般最新版本的两者是互相兼容的。

笔者本次下载的是最新的版本,直接在命令行里使用wget下载即可:

# 下载tcpdump文件
wget www.tcpdump.org/release/tcpdump-4.9.2.tar.gz

# 下载pcap文件
wget www.tcpdump.org/release/libpcap-1.9.0.tar.gz

# 安装libpcap,make install的时候可能需要root权限
tar -zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0.tar.gz
./configure
make
make install

# 安装tcpdump的过程
tar -zxvf tcpdump-4.9.2
cd tcpdump-4.9.2
./configure
make
make install

安装完成后跟上面一样输入tcpdump判断是否成功安装了:

$ tcpdump
tcpdump的命令行参数和过滤规则

tcpdump是个命令行方式的网络嗅探器,如果不使用任何参数,会持续捕获所有的网络请求内容,无法有效分析,可以针对自己的需求使用合适的参数。

# 查看所有的参数内容
$ tcpdump --help
tcpdump version 4.9.2
libpcap version 1.9.0-PRE-GIT (with TPACKET_V2)
OpenSSL 1.0.0-fips 29 Mar 2010
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
                [ -Q in|out|inout ]
                [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
                [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
                [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
                [ -Z user ] [ expression ]

常用的参数含义:

-a 将网络地址转变为易识别的主机名(默认)

-n 不将网络地址转变为易识别的主机名,即直接显示IP地址,可以省略DNS查询

-nn 不进行端口名称的转换

-t 不显示时间戳

-tttt 输出由date处理后的时间戳

-c 捕获指定数量的数据包后退出

-e 显示数据链路层的头部信息,即MAC地址信息:00:8c:fa:f3:e3:04 (oui Unknown) > 00:e0:ec:3e:8d:39 (oui Unknown), ethertype IPv4 (0x0800), length 71

-f 将目标的internet地址以IP形式展示

-i 监听指定的网络接口

-S 将tcp的序号以绝对值形式输出,而不是相对值

-r 从指定文档中读取数据包

-w 不分析和输出,将截获的数据包写入指定文档

-T 将截获的数据包按指定类型报文解析,如:cnfp/rpc/rtp/snmp/vat/wb

-F 从指定文档读取过滤规则,忽略命令行的其他参数指定的过滤规则

-v 输出较详细的信息,如IP包的TTL和协议类型

-vv 输出详细的信息

-l 将标准输出转变为行缓冲方式

-d 将上次捕获的信息包以汇编格式显示

-dd 将上次捕获的信息包以C语言格式显示

-ffffd 将上次捕获的信息包以十进制格式显示

除了参数之外,更重要的是过滤表达式,包含三个类型关键字:

host: 10.10.13.15 监听的主机

net: 10.10.0.0 监听的网络

port: 21 监听的端口

四个截获方向关键字:

dst: 10.10.13.15 目标主机

src: 10.10.0.0 源网络

dst and src

dst or src(缺省值)

多个协议关键字:ether/fddi/tr/ip/ip6/rarp/decnet/tcp/udp

还支持组合表达式:not/!/and/&&/or/||

举几个常用的例子:

# 只捕获指定IP的数据包
tcpdump host 10.10.13.15
# 捕获两个IP的数据包
tcpdump host 1010.13.15 and (10.10.13.47)
# 捕获指定端口和协议的数据包
tcpdump tcp port 21 and host 10.10.13.15
实例测试
这个实例是A机器(client)向B机器(server)发起mysql实例连接,并立刻exit的场景。

步骤:

A机器启动嗅探器: tcpdump host 10.92.143.15 -tttt -S -nn

A机器执行mysql -u root -h 10.92.143.15 -p

A机器数据库连接成功后,立刻exit;退出mysql实例连接

报文:

# 三次握手,其中S代表Syn,.代表Ack,S.代表Syn, Ack
2018-08-19 22:52:42.768100 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [S], seq 864854527, win 14600, options [mss 1460,sackOK,TS val 2246810963 ecr 0,nop,wscale 8], length 0
2018-08-19 22:52:42.810055 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [S.], seq 4288771247, ack 864854528, win 14480, options [mss 1460,sackOK,TS val 2062159250 ecr 2246810963,nop,wscale 8], length 0
2018-08-19 22:52:42.810065 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771248, win 58, options [nop,nop,TS val 2246811005 ecr 2062159250], length 0
# 登录校验,传输用户名和密码验证阶段,其中P代表Push,传输数据需要。这里包含登录验证和版本信息等元数据的交换
2018-08-19 22:52:42.852102 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [P.], seq 4288771248:4288771308, ack 864854528, win 57, options [nop,nop,TS val 2062159292 ecr 2246811005], length 60
2018-08-19 22:52:42.852118 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771308, win 58, options [nop,nop,TS val 2246811047 ecr 2062159292], length 0
2018-08-19 22:52:42.853251 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [P.], seq 864854528:864854590, ack 4288771308, win 58, options [nop,nop,TS val 2246811048 ecr 2062159292], length 62
2018-08-19 22:52:42.895198 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854590, win 57, options [nop,nop,TS val 2062159335 ecr 2246811048], length 0
2018-08-19 22:52:42.895256 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [P.], seq 4288771308:4288771319, ack 864854590, win 57, options [nop,nop,TS val 2062159335 ecr 2246811048], length 11
2018-08-19 22:52:42.895264 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771319, win 58, options [nop,nop,TS val 2246811090 ecr 2062159335], length 0
2018-08-19 22:52:42.895312 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [P.], seq 864854590:864854627, ack 4288771319, win 58, options [nop,nop,TS val 2246811090 ecr 2062159335], length 37
2018-08-19 22:52:42.937268 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854627, win 57, options [nop,nop,TS val 2062159377 ecr 2246811090], length 0
2018-08-19 22:52:42.937405 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [P.], seq 4288771319:4288771409, ack 864854627, win 57, options [nop,nop,TS val 2062159377 ecr 2246811090], length 90
2018-08-19 22:52:42.937414 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771409, win 58, options [nop,nop,TS val 2246811132 ecr 2062159377], length 0
# 发送exit;正好5个字符
2018-08-19 22:52:44.366633 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [P.], seq 864854627:864854632, ack 4288771409, win 58, options [nop,nop,TS val 2246812561 ecr 2062159377], length 5
# 四次挥手,其中F代表FIN,完成数据发送
2018-08-19 22:52:44.366649 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [F.], seq 864854632, ack 4288771409, win 58, options [nop,nop,TS val 2246812561 ecr 2062159377], length 0
## 这个是exit的答复
2018-08-19 22:52:44.408575 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854632, win 57, options [nop,nop,TS val 2062160848 ecr 2246812561], length 0
2018-08-19 22:52:44.408618 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [.], ack 864854633, win 57, options [nop,nop,TS val 2062160848 ecr 2246812561], length 0
2018-08-19 22:52:44.408652 IP 10.92.143.15.3306 > 10.119.124.24.45298: Flags [F.], seq 4288771409, ack 864854633, win 57, options [nop,nop,TS val 2062160848 ecr 2246812561], length 0
2018-08-19 22:52:44.408657 IP 10.119.124.24.45298 > 10.92.143.15.3306: Flags [.], ack 4288771410, win 58, options [nop,nop,TS val 2246812603 ecr 2062160848], length 0
具体的mysql通信内容可以查看这篇文章:https://jin-yang.github.io/po...
参考资料

Tcpdump的安装和使用:https://blog.csdn.net/s_k_yli...

Tcpdump(linux)下载、安装、使用说明:http://www.voidcn.com/article...

深度解析mysql登录原理:https://www.cnblogs.com/cchus...

TCP/IP详解 卷1:协议 第18章 TCP连接的建立和终止

Mysql通讯协议:https://jin-yang.github.io/po...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47993.html

相关文章

  • tcpdump抓包mysql建联验证TCP三次握手

    摘要:除了黑客,网络管理员也应该学会使用嗅探器来随时掌握网络的使用情况,在网络性能急剧下降时,找到网络阻塞和问题的根源。 TCP的三次握手、4次挥手是老生常谈的东西,那么具体的包数据传输过程你是否真正的试过呢?我们今天就通过具体的mysql建联实践来看看是怎么传递数据包的。 网络嗅探器和tcpdump 在共享式的网络中,数据的传输是怎么完成的呢?又是怎么找到对应的机器来进行数据交互的呢? ...

    Jacendfeng 评论0 收藏0
  • iOS,Android网络抓包教程之tcpdump

    摘要:下面截图里的流量是我监听的知乎点赞之后发送的一个请求。我之前先分析过的地址了,命令是图中列出了个前面的,是我的地址,是知乎的地址,红色方框内是发出的,白色方框内是发出的。 现在的移动端应用几乎都会通过网络请求来和服务器交互,通过抓包来诊断和网络相关的bug是程序员的重要技能之一。抓包的手段有很多:针对http和https可以使用Charles设置代理来做,对于更广泛的协议可以使用tcp...

    zzir 评论0 收藏0
  • iOS,Android网络抓包教程之tcpdump

    摘要:下面截图里的流量是我监听的知乎点赞之后发送的一个请求。我之前先分析过的地址了,命令是图中列出了个前面的,是我的地址,是知乎的地址,红色方框内是发出的,白色方框内是发出的。 现在的移动端应用几乎都会通过网络请求来和服务器交互,通过抓包来诊断和网络相关的bug是程序员的重要技能之一。抓包的手段有很多:针对http和https可以使用Charles设置代理来做,对于更广泛的协议可以使用tcp...

    ispring 评论0 收藏0
  • [转载] PHP升级导致系统负载过高问题分析

    摘要:分析的结果,发现内存,基本没有什么大的变化,网卡流量明显降低,上下文切换明显升高。网卡流量降低可以理解,因为当前系统已不能正常返回响应,但上下文切换升高却不知道什么原因。 原文:http://chuansongme.com/n/797172 背景 据XX部门兄弟反应, 其在将PHP从5.3.8 升级到5.5.13 时, 开始运行正常, 运行一段时间后, 系统负载变高,达到200%以...

    mmy123456 评论0 收藏0
  • [转载] PHP升级导致系统负载过高问题分析

    摘要:分析的结果,发现内存,基本没有什么大的变化,网卡流量明显降低,上下文切换明显升高。网卡流量降低可以理解,因为当前系统已不能正常返回响应,但上下文切换升高却不知道什么原因。 原文:http://chuansongme.com/n/797172 背景 据XX部门兄弟反应, 其在将PHP从5.3.8 升级到5.5.13 时, 开始运行正常, 运行一段时间后, 系统负载变高,达到200%以...

    awokezhou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<