[Linux]-TFTP网络抓包

目录

【TFTP】

1.概述

2.TFTP的通信过程

3.TFTP协议数据帧分析

3.1读写请求数据帧

3.2数据包

3.3应答信号

3.4错误信息

4.TFTP协议报文附带选项

【抓包工具wireshark】

1.wireshark的过滤规则

1.1IP过滤

1.2协议过滤

1.3端口过滤

1.4mac地址过滤

1.5逻辑关系

2.抓包数据分析

2.1传输层分析

2.2网络层分析

2.3链路层分析

2.4应用层分析


【TFTP】

1.概述

TFTP是一种基于UDP的简单文件传输协议,TFTP的全称叫做Trivial File Transfer Protocol,数据传输的模式有两种,一种是octer二进制传输模式,一种是netascii文本模式,这两种模式的区分在组装数据报文的时候会使用到 


2.TFTP的通信过程

当客户端使用TFTP协议向服务器发送请求的时候,首先需要组装请求读写的报文可以使用组包函数),然后从服务器那里接受数据包因为服务器是新创建一个线程来发送数据的,所以端口是随机分配的,需要通过接受函数获得新的随机端口),通过数据包获取数据以及数据包块数,修改数据第一个字节操作码然后发送应答信息,如此往复直到数据收发完毕

TFTP通信过程总结:

1.服务器在69号端口(不一定)等待客户端的请求读写信号

2.如果服务器批准了这个读写请求,那么创建一个线程使用临时端口来进行收发

3.每个数据包的块编号会比上一块加一

4.每一个数据包如果等待ack超时,会重新发送,如果多次重发还是超时,断开通信

5.数据的长度为512字节,总为516字节,前两个字节为操作码,三四字节为块编号,余下为数据

6.接收到的数据小于512字节则表示数据接受结束


3.TFTP协议数据帧分析

3.1读写请求数据帧

 客户端如果想要从服务器读数据或者写数据,就需要构建如上的数据帧,前两个字节为操作码,1表示读操作,2表示写操作(需要注意的是,网络字节序为大端存储格式,假如读操作码则需要为0000 0001),写操作后面为文件名,后面一个字节为0,是为了区分文件名和模式,因为都是字符串形式组包,最后面为字节0.

sprintf(data,"%c%c%s%c%s%c",0,1,"a.txt",0,"octet",0);
3.2数据包

 从服务器接收到的数据包如上所示,总共为516字节(可修改),前两个字节为操作码,三四字节为块编号,用来区分是第几块数据,后面512字节为文件数据

3.3应答信号

 应答信号是客户端在接收到服务器数据之后,需要发送给服务器的数据,对比接受到的数据包,其实只有操作码有差别,可以直接修改接收到的数据包,截断后面的数据,修改操作码,作为应发信号发送

3.4错误信息

 如果重发次数过多或者文件不存在等,可以通过错误信息来解析错误

前面的数字为错误码

0未定义,参见错误信息

1 File not found.

2 Access violation.

3 Disk full or allocation exceeded.

4 illegal TFTP operation.

5 Unknown transfer lD.

6 File already exists.

7 No such user

8 Unsupported option(s) requested.


4.TFTP协议报文附带选项

 如果发送的读写请求附带了选项,那么服务器会发送一个oack数据来询问客户端是否确定附带选项,客户端可以通过发送ack来确定,然后正常收发

 可选择的选项如下:

tsize选项:当读操作时,tsize选项的参数必须为“0”,服务器会返回待读取的文件的大小。当写操作时,tsize选项参数应为待写入文件的大小,服务器会回显该选项

blksize选项:修改传输文件时使用的数据块的大小(范围:8~~65464)

timeout选项:修改默认的数据传输超时时间(单位:秒)
 


【抓包工具wireshark】

wireshark是一个十分好用的网络抓包工具,而且使用的具体规则也十分的简单,通过抓取到的网络数据包,可以很清晰的知道数据报文里面具体包含了哪些数据

1.wireshark的过滤规则

1.1IP过滤

ip.src == 1.2.3.4 ,只显示发送IP为1.2.3.4的数据报文

ip.dst == 1.2.3.4 ,只显示目的IP为1.2.3.4的数据报文

ip.addr == 1.2.3.4,只显示发送IP或者目的IP为1.2.3.4的数据报文

1.2协议过滤

直接输入协议即可

如 udp tcp

1.3端口过滤

udp.srcport==8000,只显示发送端口为8000的udp报文

udp.dstport==8000,只显示目的端口为8000的udp报文

udp.port==8000,只显示目的或发送端口为8000的udp报文

tcp.srcport==8000,只显示发送端口为8000的udp报文

tcp.dstport==8000,只显示目的端口为8000的udp报文

tcp.port==8000,只显示目的或发送端口为8000的udp报文

1.4mac地址过滤

eth.src==aa:bb:cc:dd:ee:ff只显示发送mac为aa:bb:cc:dd:ee:ff的数据报文eth.dst==aa:bb:cc:dd:ee:ff只显示目的mac为aa:bb:cc:dd:ee:ff的数据报文

eth.addr==aa:bb:cc:dd:ee:ff只显示发送mac或目的mac为aa:bb:cc:dd: ee:ff的数据报文

1.5逻辑关系

and 相当于 &&,同时满足

or    相当于 ||,只需要满足一个


2.抓包数据分析

我们这里的抓包基于向另一个网络端口发送数据来举例子

我们这里首先对抓包工具进行抓取报文的限制,udp and ip.src == 192.168.x.xxx(发送IP)and ip.dst == 192.168.0.100 and udp.srcport == 1145

2.1传输层分析


2.2网络层分析

 

2.3链路层分析


2.4应用层分析

猜你喜欢

转载自blog.csdn.net/m0_72372635/article/details/131586487
今日推荐