如何使用fsockopen()打开带密码的Telnet连接?

时间:2011-06-08 14:20:53

标签: php telnet fsockopen

我想通过它的Telnet功能访问相机。问题是,它有密码保护。通过终端进行此操作时没有问题,因为我只需使用telnet 10.30.blah.blah,然后在出现提示时输入我的密码。但在php中,我没有看到输入密码的机会。

$con = fsockopen("10.30.blah.blah", 25);
$msg = "camera move left";
fwrite($con, $msg);

有人有什么想法吗?

更新:我尝试使用fputs输出密码,因为@Cfreak说,但仍无济于事。如果我完全按照脚本在终端中尝试的那样,它就可以工作了。这是现在的代码:

$con = fsockopen("10.30.blah.blah", 23, $errno, $errstr, 30);
$pass = "admin";
sleep(5);
fputs($con, $pass);
sleep(5);
$msg = "camera move left";
fputs($con, $msg);

更新:发现我的\r变量末尾需要$msg。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

你输出它。我见过的一些例子使用fputs。您可能需要睡一会儿,以确保提示符出现。 fsockopen手册页上的评论中有一个示例:http://php.net/manual/en/function.fsockopen.php

实际上我建议寻找一个可以做到这一点的模块。一个快速的谷歌显示有几个在那里。我不想推荐一个特定的,因为我没有使用过任何一个。

答案 1 :(得分:1)

最好使用proc_open来运行telnet而不是尝试实现自己的协议栈(telnet不仅仅是从套接字读取和写入)。实际上,telnet本质上是不安全的,如果可能的话应该避免。 (没有SSL的基本http身份验证同样糟糕)。

然而,与SMTP或HTTP不同,它不是一个非常复杂的协议 - 使用套接字实现一个简单的客户端应该相当简单。您提供的代码既不会读取用户名/密码提示也不会将响应写入套接字 - 所以要么您对如何通过telnet登录或者代码片段无关紧要有一些非常奇怪的想法。

Cfreak说“你可能需要睡一会儿,以确保提示出现” - 这是不正确的 - 你必须等待用户名提示,密码提示和初始CLI在使用telnet发送响应之前提示。实际上,有一种编程语言(expect)可以用来解决telnet中这种奇怪的行为。

和BTW,telnet在端口23上运行 - 端口25用于SMTP

答案 2 :(得分:0)

这里有一个通过telnet实现loginc的类: http://www.dali.net.nz/Telnet.class.php.txt

请参阅功能登录($ username,$ password)。