这是个人的课程设计课程的研究成果,虽然还有很多问题,但是希望能帮助到看到这篇文章的各位
看这篇文章之前,希望大家能有一些FTP的基础,不至于基础的内容都看不懂
FTP基础内容
windows 10系统
使用软件:FileZilla Server(FTP服务器)、Sakura frp(外网映射软件)、FileZilla Client(FTP客户端)、wireshark(抓包软件)
FTP(文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
传输FTP命令(包括:发送用户名、口令、查询目录命令、传输文件命令等)
FTP服务器从控制连接上收到一个传输文件命令后,使用20端口与FTP客户建立一个数据连接
PORT命令:由FTP客户发送,把用于数据连接的临时端口号告诉服务器
FTP服务器从控制连接上收到一个传输文件命令后,使用临时端口与FTP客户建立一个数据连接
PASV命令:由FTP客户发送,要求FTP服务器返回一个端口号
PASV响应:由FTP服务器发送,把用于数据连接的临时端口号告诉客户
默认状态下,FTP 站点允许匿名访问,FTP 服务器接受对该资源的所有请求,并且不提示用户输入用户名或密码。如果站点中存储有重要的或敏感的信息,只允许授权用户访问,应禁止匿名访问。 使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。
匿名FTP是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊的用户ID,名为anonymous, Internet上的任何人在任何地方都可使用该用户ID。通过FTP程序连接匿名FTP主机的方式同连接普通FTP主机的方式差不多,只是在要求提供用户标识ID时必须输入anonymous,该用户ID的口令可以是任意的字符串。习惯上,用自己的E-mail地址作为口令,使系统维护程序能够记录下来谁在存取这些文件。值得注意的是,匿名FTP不适用于所有Internet主机,它只适用于那些提供了这项服务的主机。
当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件,也就是说,用户可将匿名FTP主机上的所有文件全部拷贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明。
NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
ALG(Application Level Gateway),即应用程序级网关技术:传统的NAT技术只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。例如:对于FTP协议的PORT/PASV命令、DNS协议的 “A” 和 “PTR” queries命令和部分ICMP消息类型等都需要相应的ALG来支持。
FRP DDNS是将用户的动态IP 地址映射到一个固定的域名上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP 地址传送给位于服务商主机上的服务器程序,服务项目器程序负责提供 DNS 服务并实现动态域名解析。DDNS 的主要作用就是捕获用户每次变化的 IP 地址,然后将其与域名相对应,这样其他上网用户就可以通过域名来与用户交流了。
DSL每次拨号上网所获得的IP地址每次都是不同的,这样就需要我们每次访问服务器都输入新的ip地址,而映射软件起到的作用就是方便用户访问我们的服务器(只需要输入域名便可),而不用每次都输入IP地址那么麻烦。也就是说,具体的服务器,是要我们自己去设置完成的。而不同的上网方式,建立服务器的方式是不同的.还可以通过DSL直接拨号上网(不经过路由器等路由设备)和通过路由器共享上网(也就是处于局域网内部)。
我们采用的FTP服务器软件是FileZilla
在你关闭FileZilla后,再次启动,可能会碰到一直报错连接不上服务器的情况,这可能是因为电脑中对FileZilla的服务是手动状态,可是他并没有请求你是否打开,于是我们需要在服务中将该服务改成自动
在设置中,将服务器设置使用被动模式,且使用的端口范围必须是连续的端口,这里将访问端口设置为两个连续的端口17855~17856,。同时这个界面可以设置访问IP,如果不设置则默认使用127.0.0.1
需要在安全设置中完全禁用IP限制,因为FileZilla服务器会限制数据端口的连接,这里需要配置这个安全策略来确保客户端可以正常传输数据
在电脑中先选好用户要访问的路径,这里我专门创建了两个文件夹供不同用户访问
添加新的用户,并设置用户的名称与密码
设定用户能访问的文件夹范围和权限
不同的用户可以使用不同的路径,拥有不同的权限
资源管理器登录FTP服务器
浏览器登录
通过资源管理器和浏览器登录时,不询问账号,会直接进入匿名账号的权限地址,如果没有设置匿名账号会报错
内网的访问抓包,尤其是服务器端我根本抓不到,无论是本电脑和本电脑通信,还是两台电脑通信,服务器端都抓不到包,不知道是为什么
我们使用的内网穿透软件是Sakura Frp,平常玩Minecraft的时候用的也是这个,有时间的话也考虑出一期MC联机的教程
登录官网
注册账号
登录账号
通过签到获得流量
下载系统相应版本的软件,并解压安装
在用户信息界面获取访问密钥,登录自己的账号后输入访问密钥,即可成功登录
监听隧道的创建,本地端口为21,分配的端口随机
数据隧道的创建,数据隧道的映射端口必须和映射前的端口一模一样才能成功映射
开启端口
通过后台给出的IP来连接服务器
在防火墙—高级安全设置—入站规则—添加规则—将21号端口,映射端口,以及数据连接的端口添加到其中,这里的设置是为了后面客户端的成功通信
在防火墙—允许的应用中添加Filezilla server 和FileZilla Server Interface,将通信权限给服务器
cmd访问结果
因为cmd访问FTP服务器,只会访问默认的21号端口,经过映射之后,监听端口已经不是21了,所以无法访问
这是客户端浏览器连接时的抓包,其他抓包结果类似或与其有对应
Tcp建立连接三握手
欢迎信息
登录账户,为匿名账户
询问密码
发送密码
登录成功
定位到根目录
定位到根目录成功
文件传输模式设置为ASCII码
设置成功
被动模式
被动模式回报端口与IP
结束连接
资源管理器和浏览器想要调整为主动模式,需要打开旧版IE浏览器,将Internet选项中的使用被动FTP选项取消打钩
这时因为是主动登录,所以会询问用户名和密码
这时资源管理器登录成功,并开始加载,进度条加载缓慢,且加载完报错超时,通过FileZilla后台可以看到是无法获取目录,这步无法解决
这里的依然是采用客户端浏览器的抓包,但是浏览器只会登录匿名账户,所以如果采用资源管理器的话,抓包中登录用户和密码那几块会变成相应的内容
三握手建立连接
欢迎信息
输入用户名
请求密码
输入密码
登录成功
定位到根目录
定位成功
文件传输形式设置为ASCII码
设置成功
开启主动端口
开启成功
请求目录
请求目录失败,请求超时
结束连接
打开客户端
新建站点
将站点设置为被动模式(虽然我在测试中主动模式也能登录上服务器)
登录站点
登录成功
此时可以在客户端上,利用用户的相应权限来对目标地址做出相应指令,如:新建文件夹
这里采用的是服务器端的抓包
在这个流的开头出现了一种奇怪的协议,这种协议即没见过,也没法百度到
用户登录
请求密码
给出密码
登录成功
请求服务器的操作系统
回答
请求服务器的特征
回答
请求根目录
请求成功
文件传输类型设置为二进制传输
设置成功
被动模式连接
进入被动模式,打开端口
请求文件目录,这里用的是MLSD命令
新的服务器提供的MLSD命令通过FTP客户端发送MLSD命令,服务器收集文件信息,如文件创建时间,修改时间,文件大小及文件所有用,向用户返回一个标准,详细且可读格式的目录列表。由于MLSD目录列表包含UTC格式的文件修改时间,因此这对于FTP客户端非常有用,当需要同步目录时,它可转换远程文件的时间戳到你的本地时间。同时,MLST命令也被用于获得单个远程文件的时间戳。
打开数据通道获取目录
获取目录成功
新建一个目录,目录名称ykw
新建成功
访问结果,我们使用该用户登录后,断开,再次连接,并下载了匿名用户权限路径下的文件
这里采用的是服务器端的抓包分析
欢迎信息
询问是否打开TLS
并未打开
询问是否打开SSL
并未打开
匿名账户
请求密码
输入密码
登录成功
询问服务器的操作系统
回答
询问服务器的特征
回答
设置为二进制传输
设置成功
用PWD命令请求根目录
请求成功
被动模式
开启被动模式和端口
请求目录
开始建立数据连接传输目录
传输成功
这时断开连接后,重新连接服务器,产生了不一样的变化
前面的连接都一样,直到登录成功后
使用CWD命令请求了一次根目录
又使用PWD命令请求了一次根目录
两次请求都成功,以下是两个命令的区别
打印工作目录(PWD)
在响应是返回当前工作目录。
改变工作目录(CWD)
此命令使用户可以在不同的目录或数据集下工作而不用改变它的登录或帐户信息。传输参数也不变。参数一般是目录名或与系统相关的文件集合。
且这时设置文件传输类型为ASCII码模式
下载文件what.txt
打开数据通道传输该文件
成功传输
我们分配给该用户的权限为只读,权限地址和我们之前的普通用户一样
访问结果:我们使用该用户做了一些超出该用户权限的事,并得到了想要的答案
我采用的是服务器端的抓包结果,前面的抓包与正常用户抓包没什么区别
也都有访问是否为TSL,SSL,启动的文件传输类型也为ASCII码,也收到了PWD和CWD两个命令
请求下载233.txt
打开数据通道开始传输文件
文件传输成功
请求创建文件夹cgf
没有权限,创建失败
删除文件233.txt
没有权限,删除失败
问:出现了一个从未见过的协议Gryphon,且只出现在服务器端与映射服务器的交互上
推测:协议Gryphon应该是一种类似TCP的、来自内网映射软件的协议,可能含有保持连接等的功能,在一条连接中,他只会出现在未成功建立连接时的服务器端抓包中
问:每个有信息的报文前都会出现个空白报文
推测:空白报文定长66字节,其中客户端不会发给服务器但会收到,服务器即会发送也会收到该报文,可能是内网映射软件在其服务器上为了保持两端连接做的设定
问:服务器端固定以7000端口与映射服务器交互,客户端以映射出来的19741端口与其交互
推测:7000端口应该是内网映射软件使用的端口,所以无论映射的是服务器端的什么端口,应该在映射时都通过7000来与内网映射服务器交互
问:在广域网使用资源管理器和浏览器登录服务器,使用不同模式登录报错不一致,报文也不一致
推测:被动模式下如同cmd,在21号端口被映射的情况下,无法访问服务器。主动模式下,请求服务器的监听端口建立连接,但是无法建立数据连接,猜测被加密
问:为什么有时候采用命令PWD,有时候采用CWD
问:为什么有时候采用ASCII码模式传输,有时候使用二进制码传输
问:为什么在局域网服务器端抓不到包