浅浅学习下ftp协议以及面试ftp的八股文

哈喽哈喽!!!今天继续给大家介绍防火墙。本文主要介绍FTP,并使用华为eNSP模拟器,实际搭建了应用场景展示FTP相关配置。并准备了面试关于ftp的提问与回答,大家阔以参考参考呐!

什么是FTP协议呢?

FTP工作过程

搭配拓扑,抓包验证过程

抓包验证过程

 ftp传输的弊端

 面试问题

通信接口

 工作过程


什么是FTP协议呢?

文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。

  文件传输协议有基于TCP的FTP和基于UDP的简单文件传输协议TFTP,它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件传回到原节点。

FTP工作过程

针对传输的文件类型不同,FTP可以采用不同的传输模式:
ASCII模式:传输文本文件(TXT、LOG、CFG )时会对文本内容进行编码方式转换,提高传输效率。当传输网络设备的配置文件、日志文件时推荐使用该模式。
Binary(二进制)模式:非文本文件(cc、BIN、EXE、PNG),如图片、可执行程序等,以二进制直接传输原始文件内容。当传输网络设备的版本文件时推荐使用该模式。这些文件无需转换格式
即可传输。 

主动模式

被动模式

搭配拓扑,抓包验证过程

 

准备环境

 配置如下

最后结果

抓包验证过程

 ftp传输的弊端

1、FTP不具备安全性:随着每天企业数据漏洞事件的频繁发生,企业需更加关注数据安全性。普通的FTP没有针对数据传输中或存储时的本地加密,潜在地暴露了保密信息。通过FTP发送的用户和密码,因没有加密,也暴露在外。而且你可以通过任意上百个FTP客户端访问FTP服务器,根本无法安全地管控两端。

2、FTP缺少足够的管控功能:比如缺乏审核功能,不能保障发送的数据是否合规,数据流向不可控,存在数据泄露的风险。

3、FTP追溯功能弱:FTP在追踪文件传输方面功能也有限,比如:谁发送的什么文件、发送给谁、什么时候发送的。一旦出现问题难以追溯。

4、FTP不可靠:在传输过程中,尤其是传输大规模文件时,容易出现传输错误、文件丢失的情况。而且发送者无法确认收件人是否成功地收到或者下载文件,没有双方都没有任何的通知。

5、FTP需要手动清理:通常FTP不会允许普通用户或者管理员设置策略来自动地终止或移除文件。FTP服务器会将每个曾经收发的文件保留在服务器上直到IT管理员删除。手动管理这些文档对IT来说是一项低价值、高成本且劳动密集型的工作,而且会导致存储压力过大。

 面试问题

通信接口

21端口:控制连接

  • FTP服务端监听21端口等待建立连接,只有身份验证通过,才可以顺利建立连接
  • 在FTP连接期间,控制连接始终保持通常的连接状态。在数据连接存在期间,控制连接必须存 在;一旦控制连接断开,数据连接会自动关闭

20端口:数据连接

  • FTP服务端监听20端口来等待数据连接
  • 数据连接依赖于控制连接

 工作过程

①FTP客户端程序向远程的FTP服务器端发申请建立连接。

②FTP服务器端的21号端口侦听到FTP客户端的请求,作出响应,建立会话连接。

③FTP客户端程序打开一个控制端口,连接到FTP服务器的21号端口。

④ 需要传输数据时,FTP客户端打开一个数据端口,连接到FTP服务器的21号端口,文件传输完毕后,断开会话连接,释放端口。

⑤ 如果要传输新的文件,FTP客户端会再打开一个新的数据端口,连接到FTP服务器21号端口,继续进行文件传输。

⑥ 如果不再传输新的文件,会等待一段时间。当空闲时间超过规定后,FTP会话自动终止。当然,也可以由FTP客户端或服务器强行断开。

在Go语言中,你可以使用`net/http`和`os/exec`包来下载FTP文件,然后使用`encoding/csv`处理CSV数据。这里是一个简单的示例,展示如何从FTP服务器获取特定目录下的CSV文件: ```go package main import ( "fmt" "log" "net/http" "os" "os/exec" "strings" "golang.org/x/crypto/ssh/terminal" ) func downloadCSVFromFTP(ftpURL string, directory string, filename string) error { // 创建 FTP 连接 cmd := exec.Command("ftp", "-o", "temp.txt") // 使用 `ftp -o temp.txt` 记录交互过程到临时文件 cmd.Stdin = strings.NewReader(fmt.Sprintf("open %s\n", ftpURL)) // FTP URL cmd.Stdin.WriteString("username:password" + "\n") // 你的用户名和密码 cmd.Stdin.WriteString("cd " + directory + "\n") // 切换到目标目录 cmd.Stdin.WriteString("get " + filename + "\n") // 获取CSV文件 err := cmd.Run() if err != nil { return fmt.Errorf("failed to download CSV: %v", err) } // 读取并关闭临时文件 file, err := os.Open("temp.txt") defer file.Close() if err != nil { return fmt.Errorf("error opening FTP log: %v", err) } _, err = file.Seek(0, 0) // Move to the beginning of the file if err != nil { return fmt.Errorf("seeking in FTP log: %v", err) } // 如果需要,可以在这里解析temp.txt的内容来找到CSV文件路径 // 然后使用http.Get或者其他HTTP客户端库下载CSV到本地 // 删除临时文件,因为我们不再需要它 os.Remove("temp.txt") return nil } func main() { // 替换下面的值为你实际的FTP信息和文件名 ftpURL := "ftp://example.com/path/to/directory" directory := "/your/directory" filename := "file.csv" err := downloadCSVFromFTP(ftpURL, directory, filename) if err != nil { log.Fatal(err) fmt.Println("CSV downloaded successfully.") } else { fmt.Println("Failed to download CSV.") } } ``` 注意:这个例子假设你有基本的FTP权限,并且已经配置了`ftp`命令行工具。如果你没有全局安装`ftp`,你可能需要先安装。此外,对于更复杂的FTP环境(如SFTP),你可能需要使用第三方库如`golang.org/x/net/ftp`。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值