Email-FTP-RTSP协议实践研究
虚拟机:VituralBox 6.1
系统:Ubuntu 18
m4s转换工具:ffmpeg
抓包工具:Flidder Classic
文章目录
一、Email涉及的SMTP、POP3、IMAP协议
1. SMTP管“发”,POP3/IMAP管“收”
当点击“发送邮件”时,你的 mail client 会发消息给邮件服务器上的 SMTP service。这时有两种情况:
如果邮件的收信人也是处于同一个 domain,比如从http://163.com 发送给 163 的邮箱,SMTP service 只需要转给 local 的 POP3 Service 即可
如果邮件收信人是另外的 domain,比如 http://163.com 发送给 http://sina.com, SMTP service 需要通过询问 DNS,找到属于 sina 的 SMTP service 的 host
1.1 SMTP
SMTP (Simple Mail Transfer Protocol) 简易邮件传输通讯协议。SMTP 是互联网上的一种通讯协议,主要功能是用在传送电子邮件,当我们通过电子邮件程序,寄 E-mail 给另外一个人时,必须通过 SMTP 通讯协议,将邮件送到对方的邮件服务器上,等到对方上网的时候,就可以收到你所寄的信。
1.2 POP3
POP3(Post Office Protocol 3)即邮局协议的第 3 个版本,是 TCP/IP 协议族中的一员(默认端口是110)。主要功能是用在传送电子邮件,当我们寄信给另外一个人时,对方当时多半不会在线上,所以邮件服务器必须为收信者保存这封信,直到收信者来检查这封信件。当收信人收信的时候,必须通过 POP 通讯协定,才能取得邮件。
1.3 IMAP
IMAP(Internet Mail Access Protocol),即交互式邮件存取协议,是一个应用层协议(端口是143)。用来从本地邮件客户端(Outlook Express、Foxmail、Mozilla Thunderbird等)访问远程服务器上的邮件。
它是跟 POP3 类似邮件访问标准协议之一。不同的是,开启了 IMAP 后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
1.4 POP3 与 IMAP 的区别
POP3 协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的一封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
而 IMAP 提供 Webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
同时,IMAP 像 POP3 那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP 提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。
操作位置 | 操作内容 | IMAP | POP3 |
---|---|---|---|
收件箱 | 阅读、标记、移动、删除邮件等客户端与邮箱更新同步 | 客户端与邮箱同步更新 | 仅客户端内 |
发件箱 | 保存到已发送 | 客户端与邮箱同步更新 | 仅客户端内 |
创建文件夹 | 新建自定义的文件夹 | 客户端与邮箱同步更新 | 仅客户端内 |
草稿 | 保存草稿 | 客户端与邮箱同步更新 | 仅客户端内 |
垃圾文件夹 | 接收误移入垃圾文件夹的邮件 | 支持 | 不支持 |
广告邮件 | 接收被移入垃圾文件夹的邮件 | 支持 | 不支持 |
2. 登录QQ的SMTP服务,在两台主机之间发送一份简单文本邮件
SMTP协议用于系统间的Email传输,在经过上文明白了其中的原理之后,下面动手尝试一个SMTP交互的实例。
常用命令
命令行 | 作用 |
---|---|
helo smtp | 和服务器打招呼,测试登陆进去没 |
auth login | 登陆具体邮箱,用户名和密码是经过base64加密的 |
mail from | 输入邮件的发送方 |
rcpt to | 输入邮件的接收方 |
data | 开始编写邮件 |
quit | 退出 |
常见反馈代码
代码 | 含义 |
---|---|
220 | smtp已处于在线状态,可以进行相关操作 |
221 | 关闭smtp服务 |
250 | 当前操作已经正确完成 |
334 | 等待输入,在登陆用户是出现 |
235 | 验证成功 |
502 | 登陆失败 |
535 | 验证失败 |
2.1 启动Windows的Telnet Client功能
作为win10用户,利用系统已经安装好的telnet,然后在cmd中使用Telnet命令和SMTP协议命令可以实现发送邮件的基本功能。
而win10下的telnet默认是不开启的,需要手动开启。
-
打开控制面板—程序—程序与功能—启动或关闭Windows功能,找到Telnet Clinet并勾选。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GguQjLFi-1640721455176)(C:\Users\12711\AppData\Roaming\Typora\typora-user-images\image-20211220135545016.png)]
-
打开Dos窗口,输入Telnet命令测试smtp服务,成功后如下图(首个T一定要大写,否则会出现‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件" 的信息):
2.2 开通QQ邮箱的SMTP服务
- QQ邮箱的smtp服务默认是关闭的,也需要手动开启。
- 若想发送邮件,则发件方和收件方都需开启此服务。
-
登录QQ邮箱,点击:设置——账户。
-
下拉找到“IMAP/SMTP服务”,点击开启(我已开启)。
-
开启之后,系统会给我们一个“授权码”,这个授权码将作为邮箱的登录密码。若忘记授权码,则可点击上图所示的“生成授权码”再次获得授权码。
2.3 用telnet命令,SMTP发送邮件
-
打开cmd,输入
telnet smtp.qq.com 587
(smtp服务器默认端口号是25,但要做这个实验需要使用加密的587端口,否则会出现502错误);返回220,则表示成功 -
输入
helo qq.com
向服务器亮明身份;出现250表示成功 -
输入auth login,登录账户;出现334表示成功
-
输入邮箱的 base64 编码(xxxxxxxxxx@qq.com的base64编码);返回334表示成功。
Base64在线编码地址:https://www.sojson.com/base64.html
-
输入开启 IMAP/SMPT 时授权码的 base64 编码(注意授权码无空格);成功后会返回235。
这里比较令人头痛,即使更换端口也会有概率出现502或者其他错误,我查阅了很多资料无法解决,只能一直重复这几个步骤,终于在半小时后成功了。。。。
-
一次输入发送人邮箱
mail from:<xxxxxxxxxx@qq.com>
和收信人邮箱rcpt to:<xxxxxxxxxx@qq.com>
又出现了502错误,应该习惯了。解决方法就是重复,没有其他。
-
输入
data
回车,开始编辑邮件内容 -
依次输入
From:<发送者的email> To:<接受者的email> Subject:<发送主题》 空一行 <发送内容> . (输入点代表编辑结束)
-
输入quit退出。
-
来到邮箱查看接收到的信息
成功接收。但内容出了点意外,大概是因为我写入发送内容时删除了一些符号,但并没有在cmd窗口中删除成功。
3. 用telnet,手工命令登录POP服务,阅读收到的邮件
pop3默认端口为110。pop3协议有两个阶段:
- 认证阶段
用户端输入用户名、密码进行认证,服务器端返回OK
或者ERR
- 事务阶段
可以对邮件基本操作。
常用命令:
命令 | 作用 |
---|---|
user | 输入用户名 |
pass | 输入密码 |
list | 列出消息数量,并且自动编号 |
retr | 根据消息编号检索消息 |
dele | 删除消息 |
3.1 开启QQ的pop服务,步骤与SMTP部分一致
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVG1Jbkf-1640721455189)(C:\Users\12711\AppData\Roaming\Typora\typora-user-images\image-20211221000035820.png)]
3.2 使用telnet登录进行基本操作
-
输入下列指令,进入QQEmail的pop服务;反馈
+OK
代表登陆成功telnet pop.163.com 110
不同邮箱登录后的反馈不一样,比如163登陆成功后会反馈一大串字符。
-
进入认证阶段,输入的内容都不需要加密(非常方便);反馈
+OK
代表登陆成功user 用户名 pass 授权码
-
认证完成后输入list查看所有邮件信息
这里因为是小号所以只有四封右键
-
打开第三封邮件,因为前两封是QQ邮箱团队在每一次pop、smtp服务登录时都会发的邮件。
retr 邮件序号
发送方、接收方、主题与内容都能对上,代表发送成功。并且使用pop读取邮件不会有乱码产生。
-
使用
delet x
进行删除测试输入
delet 3
删除该邮件,然后去QQ邮箱里验证。可以看到删除与官网同步了。
二、FTP、HTTP1.1协议
1. FTP协议
文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
文件传输协议有基于TCP的FTP和基于UDP的简单文件传输协议TFTP,它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件传回到原节点。
1.1 FTP基本工作原理
FTP屏蔽了各计算机系统的细节,因而适合在异构网络中任意计算机之间传送文件。FTP只提供文件传送的一些基本服务,它使用TCP可靠地运输服务,FTP主要功能是减小或消除在不同系统下处理文件的不兼容性。
FTP使用客户端-服务器模型,一个FTP服务器进程可以为多个客户进程提供服务。FTP服务器有两大部分组成:一个主进程,负责接受新的请求;还有若干从属进程,负责处理单个请求。主进程工作步骤
- 打开熟知端口(21),使客户进程能够连接上
- 等待客户进程发送连接请求
- 启动从属进程处理客户进程发送的连接请求,从属进程处理完请求后结束,从属进程在运行期间可能根据需要可创建其他一些子进程
- 回到等待状态,继续接受其他客户进程发起的请求,主进程与从属进程的处理是并发进行的
FTP控制连接在整个会话期间都保持打开,只用来发送连接/传送请求。当客户进程向服务器发送连接请求时,寻找连接服务器进程的熟知端口21,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口20与客户进程所提供的端口号码建立数据传送连接,FTP使用了2个不同的端口号,所以数据连接和控制连接不会混乱。
1.1.1 FTP数据表示
FTP协议规定了控制协议传送与存储的多种选择,在以下4个方面必须做出一个选择。
- 文件类型:ASCII码文件(默认的)/ 图像文件类型(二进制的)/ 本地文件类型(用于在具有不同字节大小主机间传送二进制数据)
- 格式控制:该选项针对ASCII类型文件适用,非打印(默认选择,文件中不包含垂直格式信息)/ 远程登录格式控制
- 结构:文件结构(默认选择,文件被认为是一个连续的字节流,不存在内部的文件结构)/ 记录结构(用于文本文件)
- 传输方式:流方式(模式选择,文件以字节流方式传输,对于文件结构,发方在文件尾提示关闭数据连接,对于记录结构,有专用的两字节序列码记录结束和文件结束)/ 块方式(文件以一系列块来传送,每块前面有一个或多个首部字节)/ 压缩方式
1.1.2 FTP命令和应答
命令和应答在客户和服务器的控制连接上以 NVT ASCII码形式传送。这就要求在每行结尾都要返回C R、 L F对(也就是每个命令或每个应答)。这些命令都是3或4个字节的大写ASCII字符,其中一些带选项参数。从客户向服务器发送的FTP命令超过30种。下图是比较常用的几种命令:
应答都是ASCII码形式的3位数字,并跟有报文选项。其原因是软件系统需要根据数字代码来决定如何应答,而选项串是面向人工处理的。由于客户通常都要输出数字应答和报文串,一个可交互的用户可以通过阅读报文串(而不必记忆所有数字回答代码的含义)来确定应答的含义。
1.2 FTP工作模式
FTP有两种工作模式,分别是主动模式(PORT)和被动模式(PASV)两种模式,这两种模式是按照FTP服务器的“角度”来说的,更通俗一点说就是:在传输数据时,如果是服务器主动连接客户端,那就是主动模式;如果是客户端主动连接服务器,那就是被动模式。关于主动模式和被动模式更具体的讲解请点击:图解FTP的主动模式与被动模式以及客户端设置。
1.3 如何知道FTP传送一个文件结束?
前面说过,通用传输方式是流方式,并且文件的结尾是以关闭数据连接为标志,这意味着对每一个文件传输或目录列表来说都要建立一个全新的数据连接。其一般过程如下:
- 正由于是客户发出命令要求建立数据连接,所以数据连接是在客户的控制下建立的。
- 客户通常在客户端主机上为所在数据连接端选择一个临时端口号。客户从该端口发布一个被动的打开。
- 客户使用PORT命令从控制连接上把端口号发向服务器。
- 服务器在控制连接上接收端口号,并向客户端主机上的端口发布一个主动的打开。服务器的数据连接端一直使用端口20。
图27- 4给出了第 3步执行时的连接状态。假设客户用于控制连接的临时端口是 11 7 3,客户用于数据连接的临时端口是 11 7 4。客户发出的命令是PORT命令,其参数是6个ASCII中的十进制数字,它们之间由逗点隔开。前面 4个数字指明客户上的 I P地址,服务器将向它发出主动打开(本例中是 140.252.13.34),而后两位指明16 bit端口地址。由于16 bit端口地址是从这两个数字中得来,所以其值在本例中就是 4×256+150=1174。
图27-5给出了服务器向客户所在数据连接端发布主动打开时的连接状态。服务器的端点是端口2 0。
服务器总是执行数据连接的主动打开。通常服务器也执行数据连接的主动关闭,除非当客户向服务器发送流形式的文件时,需要客户来关闭连接(它给服务器一个文件结束的通知)。
2. HTTP1.1协议
HTTP的全称是Hypertext Transfer Protocol,是在1989年World Wide Web发展起来之后出现的标准协议,用来在WWW上传输数据。HTTP/1.1是1997年在原始的HTTP协议基础上进行的补充和优化。
到了2015年,为了适应快速发送的web应用和现代浏览器的需求,发展出了新的HTTP/2协议,主要在手机浏览器、延时处理、图像处理和视频处理方面进行了优化。
基本上所有的现代浏览器都支持HTTP/2协议了,但是还有很多应用程序使用的是老的HTTP/1.1协议,本文将会介绍HTTP/1.1和HTTP/2的不同之处。
HTTP 1.0 是由Timothy Berners-Lee在1989年作为World Wide Web的标准协议发布的。通常使用HTTP方法如:GET或者POST,以TEXT文本的形式在客户端和服务器端进行消息传输。
我们可以使用post man很方便的进行HTTP请求,如下所示:
GET /index.html HTTP/1.1
Host: www.flydean.com
客户端通过GET请求,请求服务器端的/index.html页面,使用的协议是HTTP/1.1,服务器端收到该请求之后,会将相应以文本的形式返回给客户端。
HTTP协议是对底层的TCP/IP协议的封装,因为我们不需要交接具体的报文拆分和封装的底层细节,只需要关注于具体的业务逻辑即可,非常的方便。
3. FTP协议和HTTP协议的比较
1、HTTP协议是用来浏览网站的,而FTP是用来访问和传输文件的,FTP文件传输有点批量上传和维护网站的意思,而HTTP文件传输更多的是为终端用户提供文件传输,比如电影、图片、音乐之类。
2、HTTP 和 FTP 客户端:通常的HTTP客户端就是浏览器,而FTP服务可以通过命令行或者用户自有的图形界面客户端。
3、HTTP 头:HTTP 头包含了 metadata ,比如说最后更改的日期、编码方式、服务器名称版本还有其他的一些信息,而这些在FTP中是不存在的。
4、FTP要比HTTP早出现10年左右。
5、数据格式:FTP能传输ACSII数据或者二进制格式的数据,而HTTP只用二进制格式。
6、HTTP中的流水线:HTTP支持流水线,这就意味着客户端可以在上一个请求处理完之前,发出下一个请求,其结果就是多次请求数据之前省掉了部分服务器客户端往返时延。而FTP并没有这项支持。
7、HTTP中的动态端口:FTP一个最大的问题就是它使用两个连接,第一个连接用来发送控制指令,当接受或者发送数据的时候,又打开第二个TCP连接。而HTTP在双向传输中使用动态端口。
8、HTTP中的持久连接:对一个HTTP会话来讲,客户端可以维护一个单个的连接并使用它进行任意数量的数据传输。FTP每次有数据的需要时都创建一个新的连接。重复的创建新的连接带来的体验并不好,因为每次创建连接都必须让双方握手验证,这消耗了很多时间。
9、HTTP中的压缩算法:HTTP提供了一个在一些压缩算法中客户端和服务器共同协商选择的办法。其中gzip可以说是最有影响力的一种,而FTP中并不存在这种复杂的算法。
10、HTTP支持代理:HTTP一个很大的特点就是支持代理,这种功能是构建在协议里的,而FTP并不支持。
11、而FTP也能脱颖而出的一点是这个协议是直接面向文件级别的。这以为着FTP有例如可以通过命令列出远程服务器上的目录列表,而HTTP没有这个概念。
12、速度:可能最通常的问题了:哪一个传输更快?
什么使FTP服务更快?
1、没有在发出的数据中加入meta-data,仅传输原二进制文件。
2、没有过度的分块编码
什么使HTTP服务更快?
1、重用已存在的持久连接,从而有更好的TCP表现。
2、流水线的支持使得从同一个服务器上请求多个文件更快。
3、自动的压缩机制使得传输的数据更少。
4、没有命令/应答机制最大限度的减少了往返时延。
总结:当然最终的结果会因具体的情况而异,但我想说的是,单次传输一个静态的文件,很难衡量两者的区别对单个的小文件来说,FTP传输更快,当传输多个文件时,HTTP更快。
4. 在Ubuntu系统上安装一个Ftpd服务(搭建FTP服务)
在Ubuntu系统上安装一个Ftpd服务(搭建FTP服务)。用telnet 手工方式 登录ftp服务,上传一个图片文件或压缩包文件;然后,再手工用分片下载的方式,将此文件分片下载到本地(多个小文件),再将这几个小文件合并为1个大文件(无须编程,用copy命令即可实现),看是否与原文件一样大小,是否能正常打开。
4.1 搭建FTP服务
-
打开终端,输入
sudo apt-get install vsftpd
如安装失败,请检查网络连接状态
-
安装成功后,系统默认会在文件系统下的srv目录下创建一个ftp文件(和home在同一级目录下的),这里就是ftp服务器的默认文件夹!
-
修改/etc/apt/sources.list文件,我们可以使用在终端中输入命令
vi /etc/apt/sources.list
-
安装好vsftpd后,我们就需要配置它,那么就要修改 /etc/vsftpd.conf文件。具体的配置和说明,见下文
# 禁止匿名用户登录 anonymous_enable=NO # 允许系统用户登录 local_enable=YES # 启用可以修改文件的 FTP 命令 write_enable=YES # 本地用户创建文件的 umask 值 local_umask=022 # 允许为目录配置显示信息,显示每个目录下面的message_file文件的内容 dirmessage_enable=YES # 开启日记功能 xferlog_enable=YES # 使用标准的20端口来连接ftp connect_from_port_20=YES # 使用标准日志格式 xferlog_std_format=YES # 如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录 chroot_list_enable=YES # 指定限制的用户文件 chroot_list_file=/etc/vsftpd/chroot_list # ftp服务器将处于独立启动模式 listen=YES # 设置一个本地用户登录后进入到的目录 local_root=/home/ftp # 设置PAM认证服务的配置文件名称,该文件保存在“/etc/pam.d/”目录下 pam_service_name=vsftpd # ftp将检查userlist_file设置文件中指定的用户是否可以访问vsftpd服务器 userlist_enable=YES # 只允许user_list文件中记录的ftp用户能登录vsftp服务,其他的ftp用户都不可以登录。 userlist_deny=NO # 定义限制/允许用户登录的文件(自己命名,不一定是这个) userlist_file=/etc/vsftpd/allowed_users # ftp服务器将使用tcp_wrappers作为主机访问控制模式 tcp_wrappers=YES # 连接ftp服务费使用的端口 listen_port=21
-
手动创建一个ftp根目录,使连接用户可以访问该目录下的资源
mkdir /home/uftp
接着创建一个子目录
mkdir /home/uftp/data_test
修改ftp这个目录的权限
chmod -R 777 /home/ftp
-
创建allowed_users(自己命名,不一定是这个),位于etc/vsftpd目录下(与配置文件中所写保持一致)
sudo vi /etc/vsftpd/allowed_users
在文件中添加允许登录ftp服务器的用户名
联立下面的步骤我添加了uftp和自己的Ubuntu用户名karmen
-
新建用户uftp,指定用户主目录和所用shell,并设置密码
sudo useradd -d /home/uftp -s /bin/bash uftp sudo passwd uftp
然后将目录/home/uftp的所属者和所属组都改为uftp
sudo chown uftp:uftp /home/uftp
-
查询本机ip地址后在游览器输入ftp://ip地址进入ftp服务器
此次测试与cmd测试的主机ip地址不同,因为这是在修改虚拟机ip地址之前测试的,并且是在虚拟机上进行测试的,所以与Windows端有所差异,至于为什么要修改ip地址下面会做解释
这里因为未知原因不能直接使用服务器访问ftp服务器,于是我借助了名为FileZilla的工具来进行访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZGVuxHD-1640721455198)(C:\Users\12711\AppData\Roaming\Typora\typora-user-images\image-20211221235313112.png)]
访问成功,即FTP服务器搭建成功;并且能够直接下载服务器上的文件
-
Windows连接测试
在Ubuntu上使用
ifconfig
查看虚拟机的IP地址输入
ftp 虚拟机ip地址
连接成功后反馈信息220和200,再根据提示信息输入用户名和密码就可以登录成功了
4.2 ftp:connect:连接超时
4.2.1 错误原因
这个问题困扰了我很久,相信遇到的不止我一个人,所以值得单独再开一栏。
对于连接超时,网上最多的说法是防火墙没关,如果是这样就很好办了,关掉再重启ftp服务器就行了。
在众多让你关防火墙的文章中我找到了一个另一种解释–>程序员七哥: Ubuntu配置ftp
文中指出了一个更有力地说法:虚拟机上Ubuntu系统的自动配置的IP地址与Windows客户端的ip地址不在一个网段
比如,我客户端的ip地址为:192.168.88.88,子网掩码为255.255.255.0
虚拟机的ip地址为:10.160.0.120,子网掩码为255.255.0.0
前者经过ip地址与子网掩码的二进制and运算得到网段为192.168.88.0
计算过程:
11000000 10101000 01011000 01011000(192.168.88.88)
11111111 11111111 11111111 00000000(255.255.0.0)
11000000 10101000 01011000 01011000(192.168.88.0)
后者经过ip地址与子网掩码的二进制and运算得到网段为10.160.0.0
显然两者不在同一个网段,所以我们需要手动配置虚拟机的ip地址,让他与我们的Windows客户端在同一个网段
4.2.2 解决方法
本次实验使用的使Ubuntu18,界面可能会有些许不同
-
点击右上角
网络
->有线设置
->⚙
-
手动配置子网掩码、网管、DNS服务器,使其与Windows客户端在同一网段,在最后点击保存(与ipconfig中的信息一致)
-
修改虚拟机网络配置。这一步修改前,建议将虚拟机关闭。修改完成后,重新启动。选择Ubuntu,右键选择 设置,找到 网络。具体修改如下图所示
-
重启虚拟机输入ifconfig验证
-
修改成功,再启动ftp服务器使用windows进行连接测试
瞬间就链接成功了。
也就是说,可能Windows更换一个WIFI或是一个以太网时,都得重新配置网段,挺麻烦的。。
4.3 用telnet登录ftp服务器
下面介绍telnet针对FTP的基本命令
命令 | 描述 |
---|---|
ABOR | 中断数据连接程序 |
ACCT | 系统特权帐号 |
ALLO | 为服务器上的文件存储器分配字节 |
APPE | 添加文件到服务器同名文件 |
CDUP
| 改变服务器上的父目录 |
CWD
| 改变服务器上的工作目录 |
DELE | 删除服务器上的指定文件 |
HELP | 返回指定命令信息 |
LIST | 如果是文件名列出文件信息,如果是目录则列出文件列表 |
MODE | 传输模式(S=流模式,B=块模式,C=压缩模式) |
MKD | 在服务器上建立指定目录 |
NLST | 列出指定目录内容 |
NOOP | 无动作,除了来自服务器上的承认 |
PASS | 系统登录密码 |
PASV | 请求服务器等待数据连接 |
PORT | IP 地址和两字节的端口 ID |
PWD | 显示当前工作目录 |
QUIT | 从 FTP 服务器上退出登录 |
REIN | 重新初始化登录状态连接 |
REST | 由特定偏移量重启文件传递 |
RETR | 从服务器上找回(复制)文件 |
RMD | 在服务器上删除指定目录 |
RNFR | 对旧路径重命名 |
RNTO | 对新路径重命名 |
SITE | 由服务器提供的站点特殊参数 |
SMNT | 挂载指定文件结构 |
STAT | 在当前程序或目录上返回信息 |
STOR | 储存(复制)文件到服务器上 |
STOU | 储存文件到服务器名称上 |
STRU | 数据结构(F=文件,R=记录,P=页面) |
SYST | 返回服务器使用的操作系统 |
TYPE | 数据类型(A=ASCII,E=EBCDIC,I=binary) |
USER > | 系统登录的用户名 |
响应代码:
响应代码 | 解释说明 |
---|---|
110 | 新文件指示器上的重启标记 |
120 | 服务器准备就绪的时间(分钟数) |
125 | 打开数据连接,开始传输 |
150 | 打开连接 |
200 | 成功 |
202 | 命令没有执行 |
211 | 系统状态回复 |
212 | 目录状态回复 |
213 | 文件状态回复 |
214 | 帮助信息回复 |
215 | 系统类型回复 |
220 | 服务就绪 |
221 | 退出网络 |
225 | 打开数据连接 |
226 | 结束数据连接 |
227 | 进入被动模式(IP 地址、ID 端口) |
230 | 登录因特网 |
250 | 文件行为完成 |
257 | 路径名建立 |
331 | 要求密码 |
332 | 要求帐号 |
350 | 文件行为暂停 |
421 | 服务关闭 |
425 | 无法打开数据连接 |
426 | 结束连接 |
450 | 文件不可用 |
451 | 遇到本地错误 |
452 | 磁盘空间不足 |
500 | 无效命令 |
501 | 错误参数 |
502 | 命令没有执行 |
503 | 错误指令序列 |
504 | 无效命令参数 |
530 | 未登录网络 |
532 | 存储文件需要帐号 |
550 | 文件不可用 |
551 | 不知道的页类型 |
552 | 超过存储分配 |
553 | 文件名不允许 |
telnet本身不支持文件传输,文件传输一般是通过ftp、scp等协议进行传输,但是有了telnet权限后可以登录设备,登录到设备后一般都支持busybox功能,通过busybox下的ftp进行文件传输。
启动cmd,输入telnet 虚拟机ip地址
来和服务器建立连接,再依次输入USER和PASS
启动PASV传输模式,然后启动另一个CMD,输入telnet
+ip地址
+108*256+38=27686
作为端口号(别问为什么,问就是规定)
得到一个不管你输入什么都还是一片黑的窗口,不要怕,这就说明我们成功开启了数据连接了。
输入STOR txtname.txt上传文本文件,然后在黑框中输入想要传输的内容就可以了。
输入内容的时候也是什么都看不到
4.4 上传一张图片到ftp服务器
使用ftp上传一张图片
-
登录ftp服务器
-
上传
下载文件使用命令:get [文件名] [重命名]
上传文件使用命令:put [文件名] [重命名] -
在Ubuntu上查看
上传成功
-
下载该图片并保存为ftp_get_test2.png
4.5 分割图片
在Ubuntu内使用命令分割图片
sudo split -b 100k ftp_send_test2.png picture
100k指以100K大小进行一次分割,picture是分割后文件的名称前缀,-b表示文件名后跟字母作为后缀。
有关此命令的详细介绍,可以参考此处
可以看到分割后的前四个文件都控制在了100k,最后一个小于100k因为原图只有434k
4.6合并文件
使用cat命令合并图片
cat a b>c
4.7 与原文件进行比较并检验是否能打开
能打开并且大小一致。
三、RTSP、MMS等多媒体流协议
1. RTSP
1.1 简介
RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。
1.2 RTSP与HTTP
- 联系:两者都用纯文本来发送消息,且rtsp协议的语法也和HTTP类似。Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协议分析代码 。
- 区别:rtsp是有状态的,不同的是RTSP的命令需要知道现在正处于一个什么状态,也就是说rtsp的命令总是按照顺序来发送,某个命令总在另外一个命令之前要发送。Rtsp不管处于什么状态都不会断掉连接。而http则不保存状态,协议在发送一个命令以后,连接就会断开,且命令之间是没有依赖性。rtsp协议使用554端口,http使用80端口。
1.3 RTSP与RTP
- RTP:Realtime Transport Potocol 实时传输协议
RTP提供时间标志,序列号以及其他能够保证在实时数据传输时处理时间的方法。 - RTCP:Realtime Transport Control Potocol 实时传输控制协议
RTCP是RTP的控制部分,用来保证服务质量和成员管理。RTP和RTCP是一起使用的。 - RTSP:RealTime Streaming Potocol 实时流协议
RTSP具体数据传输交给RTP,提供对流的远程控制
RTP是基于 UDP协议的, UDP不用建立连接,效率更高;但允许丢包, 这就要求在重新组装媒体的时候多做些工作
RTP只是包裹内容信息,而RTCP是交换控制信息的,Qos是通过RTCP实现的
应用程序对应的是play, seek, pause, stop等命令,RTSP则是处理这些命令,在UDP传输时并使用RTP(RTCP)来完成。如果是TCP连接则不会使用RTP(RTCP)。
2. MMS
2.1 简介
MMS是Multimedia Message Service的简称,中文名为多媒体信息服务。MMS的工业标准是由两个组织,WAP Forum(WAP论坛)和3GPP(3G Partnership Project:3G伙伴计划)所制订的。因此,MMS是设计成可以在WAP协议的上层运行,它不局限于传输格式,既支持电路交换数据格式(circuit-switched data),也支持通用分组无线服务GPRS格式(general packet radio service)。其工作原理为利用高速传输技术EDGE(Enhanced Data rates for GSM Erolution是一种提高数据速率的新技术,是GSM向第三代移动通信系统IMT-2000过渡的台阶。它也被称为"GSM 384",因为这种技术能使数据速率由目前的9.6kbit/s提高到384kbit/s,这种速率可以支持语音、因特网浏览、电子邮件、会议电视等多种高速数据业务)和GPRS的支持下,以WAP(无线应用协议)为载体传送视频、图片、声音和文字。
2.2 连接方法
MMS 是连接 Windows Media 单播服务的默认方法。若观众在 Windows Media Player 中键入一个 URL 以连接内容,而不是通过超级链接访问内容,则他们必须使用MMS 协议引用该流。MMS的预设埠(端口)是1755。
当使用 MMS 协议连接到发布点时,使用协议翻转以获得最佳连接。“协议翻转”始于试图通过 MMSU 连接客户端。 MMSU 是 MMS 协议结合 UDP 数据传送。如果 MMSU 连接不成功,则服务器试图使用 MMST。MMST 是 MMS 协议结合 TCP 数据传送。
2.3 使用方法
如果连接到编入索引的 .asf 文件,想要快进、后退、暂停、开始和停止流,则必须使用 MMS。不能用 UNC 路径快进或后退。若您从独立的 Windows Media Player 连接到发布点,则必须指定单播内容的 URL。若内容在主发布点点播发布,则 URL 由服务器名和 .asf 文件名组成。例如:mms://windows_media_server/sample.asf。其中 windows_media_server 是 Windows Media 服务器名,sample.asf 是您想要使之转化为流的 .asf 文件名。
若您有实时内容要通过广播单播发布,则该 URL 由服务器名和发布点别名组成。
如例:mms://windows_media_server/LiveEvents。这里 windows_media_server 是 Windows Media 服务器名,而 LiveEvents 是发布点名。
3. 使用VLC播放网络流视频
打开VLC->媒体->打开网络串流->输入地址
**动画片:**rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
景点摄像头: https://hd-auth.skylinewebcams.com/live.m3u8?a=ou48nrnnkriljs5q5sqrpe2pf0
四、使用fiddler 去分析视频网站在线视频播放的网络流协议
这里分析bilibili为例:
在浏览器上播放bilibili视频,打开fiddler进行抓包
这个视频是我自己投的,没有侵害任何人的利益🤬🤬🤬🤬
1. fiddler配置
在tools中的options中,按照图中勾选后点击Actions,选择Trust Root Certificate。
配置远程链接:
选择允许监控远程链接,端口可以随意设置,只要别重复就行,默认8888
重启Fiddler,使配置生效
2. 抓包
-
打开视频网站后点击出现的第三个白蓝色包
0-992表示这个数据包包含的内容,而28291323表示完整视频的内容。
-
利用Composer下载完整内容->选中第一个数据包->点击右上方Composer->左键点击第一个数据包拖动到GET下的框中
-
将0-1119改为我们需要的数据0-3141点击右上角的Execute。
回到左边,在最下方有一个新的蓝白色图标选中,鼠标右键Save->Response->Response Body,保存格式为.m4s
B站将视频音频是分开的,抓的包能够找到两个不同大小的完整数据包,一个是音频,一个是视频,
以同样的方式下载保存为.m4s文件,通过ffmpeg将m4s文件合成为mp4。
ffmpeg -i D:\Helpers\FiddlerCatches\video.m4s -vcodec copy -acodec copy -f mp4 D:\Helpers\FiddlerCatches\final.mp4
五、总结
本次实验内容繁多,涉及到了多方面的互联网协议,关于所学所获已经写在了各个过程中。
六、参考文章
1. Email涉及的SMTP、POP3、IMAP协议参考部分
SongXJ-- : 计算机网络:Email 协议 (SMTP、POP3、IMAP)
Fossette_lhx : 利用Telnet登录qq邮箱发送邮件——SMTP协议学习
你敬爱的明明哥 命令行发送接收邮件smtp、pop3协议-计网(3)
2. FTP、HTTP1.1协议参考部分
适用性100%,↑↑↑↑强力推荐这篇文章❤❤❤❤
KingBing_Ng: HTTP1.1协议-RFC2616-中文版
砸漏: 图文详解Ubuntu搭建Ftp服务器的方法(包成功)