2011-11-02 57 views
2

我有一个项目做的,它是这样的:使PHP响应远程登录(PHP Telnet服务器)

当您打开Telnet控制台和telnet到我的服务器,PHP应该回应: “你好,你叫什么名字?”

然后你输入你的名字等等。我怎样才能在PHP中做到这一点?它甚至有可能吗?

+0

php no,与shell,是的。让人们引导你的服务器寻找一些微不足道的东西并不是一个好主意,为什么不建立一个'它'的网站? – 2011-11-02 23:20:17

+0

你的意思是shell()命令? – Techboy6601

+0

不,我的意思是说,你可能不应该使用它的原则, – 2011-11-02 23:22:44

回答

0

Actual TELNET可以是一个有点难以得到正确的;有很多控制序列用于影响终端显示其内容的方式。

如果你只是想编写一个人可以通过TELNET使用服务,那么它很可能是最好使用现有 TELNET服务器(Ubuntu有几个可用的软件包,简单的TELNET:inetutils-telnetdtelnetd;对于加密TELNET:telnetd-ssl;对于Kerberos认证的TELNET:heimdal-serverskrb5-telnetd。)提供TELNET功能,并将您的PHP程序设置为登录shell,无论您希望每个用户都登录哪个用户。 (关于登录shell信息,请参阅passwd(5)。)

如果你想要做的所有的插座操作自己,那么你就需要使用BSD套接字支持; create a socket,bind a server name to the socket,listen on the socket,并且当新的连接进入时,fork a new process to handle the new clientaccept the new connection

一旦您拥有一个连接客户端的新进程,就可以使用标准的读写操作向客户端发送和接收数据。如果你真的想支持完整的TELNET规范,那么需要一些聪明的编程。如果您不介意不能访问高级终端功能(例如readline(3),ncurses(3)slang),则可能需要在打开第八位时删除字符,以摆脱客户端的TELNET控制字符。 (我没有试过这个,因为我总是使用netcat工具,当我想要一个干净的主机之间的未加密和未经身份验证的连接。)

+0

请注意,“分叉一个新流程”并非绝对必要,但它确实使处理多个连接的客户端变得更加容易。 – sarnold