如何检查客户端是否连接到C#中的另一个端口

时间:2014-12-20 11:08:21

标签: c# sockets port

我在C#中创建了一个服务器正在侦听端口9000和9001的程序。客户端必须使用用户名连接到9000端口。如果用户名正确,则必须连接到9001才能发送消息,但必须保持连接到9000端口。我做了这个部分,但我不知道如何检查连接到9001端口的客户端是否是正在监听9000端口的客户端。

如何检查连接到9001的客户端是否是9000端口中具有正确用户名的客户端?

1 个答案:

答案 0 :(得分:3)

您无法从连接本身知道连接到端口9001的远程端点与连接到端口9000的远程端点是相同的。您必须通过端口9000上的连接发出某种令牌,客户端在端口9001上显示以进行身份​​验证。

请注意,如果您没有在连接上使用加密,那么这本身就不会提供太多安全性。假设网络上没有敌对实体,那么这将是一种关联两个端口上的连接的方法。但是有人在任何时候监视连接都可以简单地拦截令牌并自己连接到第二个端口使用它。

请参阅FTP规范并浏览网页以了解与FTP相关的安全问题,特别是其PASV模式。在“活动”模式下,FTP连接到客户端正在侦听的端口;但这与各种防火墙,代理和NAT路由器(所有这些都倾向于干扰或完全阻止客户端接收入站连接请求的能力)冲突。

FTP规范通过引入“被动”(PASV)模式来“解决”这个问题,但这会产生你将要遇到的相同基本问题:服务器只是告诉客户端哪个端口为用于数据连接,攻击者可以监视此响应或预测它(由于FTP服务器中的非随机行为),并在客户端可以自己连接到端口。

这是一篇有趣的文章,我发现它讨论了与FTP PASV模式相关的安全问题,在您的方案中类似:PASV security and PORT security

因此,在处理此问题时,首先需要确定所需的安全级别。坦率地说,如果您需要真正安全的连接,则应该在用于该用户的每个连接上对用户进行身份验证。