我自己的应用程序是否可以使用端口 20 和 21 但不能用于 FTP 目的?

网络工程 通讯协议
2021-07-24 00:07:27

基本上,我的问题是,对于这些官方端口,我是否仍然可以让我自己的应用程序将这些端口用于其他数据交换目的?如果我选择这样做,会有什么不利之处?

2个回答

是的。只要您可以配置应用程序端口,您就可以将任何端口用于任何事情(几乎除了少数例外)。您可以在路由器中转发它,通常可以将任何外部端口转发到任何内部端口(如果您需要解决方法)。

事实上,FTP 端口通常用于漏洞利用,因为许多防火墙都会打开这些端口,并且由于 FTP 服务器发送和接收文件,并且通常具有较弱的身份验证机制,它们可用于上传恶意代码或代理远程攻击。

但答案是肯定的。是的你可以。

快速编辑:虽然有时软件会阻止您使用某些端口,但如果您正在编写自己的应用程序,那不会有问题(另外,您可以随时按照我上面提到的方式转发端口,必要时)。

真的没有像 IP 地址那样的“保留端口”之类的东西,只是常用的端口(例如 http 的端口 80、https 的 443、http 代理的 8080 等-但我可以放一个 http web如果我愿意,可以在端口 59623 上使用服务器 - 尽管某些浏览器可能会将其称为安全风险而不加载它)。一些编号非常低的端口用于低级以太网协议,例如 ICMP、Echo、Discard 等。这些端口可能已经在使用中,因此难以分配(但并非不可能)。

如果已经分配了端口,则需要先杀死正在使用它的程序,然后才能将其用于自己的程序。

此外,在许多操作系统上,非 root 用户或非特权应用程序会阻止低于 1000 的端口(或该区域内的某些版本,低于 10000 的某些发行版)。大多数 linux 发行版都是这种情况(您可以分配一个低号端口,但仅限于 SU 特权。)Android 操作系统也是如此(它只是一个经过大量修改的 linux 内核。)

例如,将端口 20 用于 Web 的主要缺点是混乱。如果您负责计算机,则可以在您喜欢的任何端口上运行您喜欢的任何东西。(只要您的软件是可配置的,并且在运行进程将阻止新进程使用相同端口的规则内。)

给定服务的端口号的管理“保留”实际上是非常非正式的,您必须记住一切都是多么流畅。

Cerf 和 Postel 调查了 1972 年每个人的使用情况,早期的主要服务得到了他们的“众所周知的端口号”:“我们想对其他应该众所周知的套接字进行编目,所以我们希望能有一张便条或电话呼叫...”(RFC 322)。后来这成为了 RFC 的分配编号系列。

值得注意的是,在分配的数字 RFC(在它进入数据库之前最后是1700)中有数百个所谓的“知名”端口,大多数网络人从未使用过甚至听说过,要么是过时的、晦涩的、泛滥的通过更明智的方法,或者实际上,他们只是保留了一个数字,但从未在一两个站点之外真正实施过。(协议也是如此;我个人认为我只使用了大约六种协议,并且只识别了一两个以上。)

顺便说一句,从安全的角度来看,这就是防火墙必须检查流量内容以对流量进行算法猜测的原因。如果您的策略决定禁止对特定站点的 HTTP,您实际上如何执行它?您不能简单地查看端口号。(由于代理,您也不能只查看 IP 地址。由于 HTTPS,您可能无法查看 GET。简而言之,这可能非常困难。)

很容易将其批评为混乱。但实施互联网协议的简易性和开放性,以及试验它们和设计新事物的简易性正是使互联网起飞的原因。

电子邮件和新闻被认为是极好的,直到那些物理学家开始搞乱文档传输,最终产生了无所不能的网络,直到 1992 年才获得保留端口号(RFC 1340,1990年的RFC 1060没有)。