目录
【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