2016-01-22 119 views
1

我正在用Python写一个Socket服务器,并且还要连接到服务器的Socket客户端。只允许来自自定义客户端的连接

客户端与服务器交互的方式是客户端在调用操作时发送信息,并由服务器处理信息。

我遇到的问题是我能够通过Telnet连接到我的服务器,并且可能还有其他我还没有尝试过的东西。我想禁用来自这些其他客户端的连接,并且只允许来自Python客户端的连接。 (最好是我定制的客户端,因为它发送信息进行通信)

有没有一种方法可以设置连接身份验证以区分Python客户端和其他人?

目前没有代码,因为这是我希望在弄脏手之前能够解决的问题。

回答

1

@holdenweb已经给出了基本信息的很好答案。

如果(终端)软件发送应用程序期望的字节作为有效标识,您的应用程序将永远不会知道它是否与原始客户端或其他任何内容交谈。

测试有效客户端的一种可能方式可能是,您的服务器发送加密和认证问题(在每次测试中应该不同)! “什么是18:37:12(当前日期和时间)加2(随机)小时?”
然后,加密/认证将是另一个问题。
如果你保持这个算法的秘密,只有你的客户可以回答并成功验证自己。它可以被黑客攻击/反向工程,但它对基本攻击者是安全的。

+0

我已经完成了,因此客户端发回了问题答案的MD5哈希,并且运行良好!谢谢。 – finnrayment

1

当您的服务器建立新的连接时,您的协议必须指定某种方式让客户端进行身份验证。最终,网络基础设施无法确定哪种进程启动了连接,因此您必须指定一些交换机,以便服务器确信它确实在与有效的客户机进程交谈。

+0

这就是事情,我不知道如何拿出一个有效的例子在我脑海中。有任何想法吗? – finnrayment

+1

好吧,一个非常简单的方法是要求客户端发送的第一个字节是“我是一个有效的Python客户端”,但是当然Telnet用户也可以这样做。另一种方法是在连接时向客户端发送一个字符串,要求它计算一个响应,然后在响应之后进行验证。 – holdenweb

+0

请参阅https://mayaposch.wordpress.com/2011/10/03/design-your-own-protocol-in-five-minutes/,以获取对协议设计的相对非可怕的介绍。当然,它可以比这更复杂。 – holdenweb

相关问题