你好,
我有一个设备,它公开了一个 telnet 接口,您可以使用用户名和密码登录,然后操纵设备的工作。
我必须编写一个 C 程序,对客户端隐藏 telnet 方面,而是为用户提供一个接口来控制设备。
有什么好方法可以继续。我尝试编写一个简单的套接字程序,但它在登录提示符处停止。我的猜测是我没有遵循 TCP 协议。
有没有人尝试过这个,有没有开源库可以做到这一点?
谢谢
补充:最终我希望通过 web api/webservice 公开它。平台是linux。
如果 Python 是一个选项,您可以使用telnetlib。
代码示例:
#!/usr/bin/env python
import getpass
import sys
import telnetlib
HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()
telnet 的协议非常简单……您只需创建一个 TCP 连接,然后发送和接收 ASCII 数据。差不多就是这样。
所以你真正需要做的就是创建一个通过 TCP 连接的程序,然后从 TCP 套接字读取字符并解析它以更新 GUI,和/或将字符写入套接字以响应用户在 GUI 中操作控件。
你将如何实现它很大程度上取决于你使用什么软件来构建你的界面。在 TCP 方面,围绕 select() 的简单事件循环就足够了。
虽然 telnet 几乎只是一个连接到终端的套接字,但它并不完全。我相信在建立连接后不久可能会传递一些控制字符。如果您的设备正在发送一些意外的控制数据,那么它可能会混淆您的程序。如果您还没有,请下载 wireshark(或 tshark 或 tcpdump)并监控您的连接。Wireshark(以前是 ethereal)是跨平台的,非常容易用于简单的东西。使用 tcp.port == 23 过滤
这可能对您有用。
下载腻子源代码。检查 TELNET.C,Putty 的 Telnet 后端。
我真的发现Beej 的网络编程指南很好地介绍了 C 中的网络编程。
除非应用程序是微不足道的,否则更好的起点是弄清楚您将如何创建 GUI。这是一个更大的问题,并且对您的项目的影响比您如何通过 telnet 进入设备产生更大的影响。你一开始提到了 C,然后开始谈论 Python,这让我相信你在这件事上相对灵活。
一旦你在语言/平台上设置好,然后寻找一个 telnet 库——你应该找到一些已经实现的合理的东西。
在这里查看源代码。它对我理解 Telnet 协议有很大帮助。
查看 telnet 客户端中的选项:在任意侦听套接字上并点击escape]
进入客户端。
telnet> help
telnet> set ?