编写一个telnet客户端
你好,
我有一个设备,它提供了一个telnet接口,你可以用用户名和密码登录,然后控制设备的工作。
我需要写一个C程序,把telnet的部分隐藏起来,而是给用户提供一个控制设备的界面。
我该怎么做比较好呢?我试着写了一个简单的socket程序,但在登录提示那里就停住了。我猜是因为我没有遵循TCP协议。
有没有人尝试过这个?有没有开源的库可以用来实现这个?
谢谢
补充:最终我希望通过一个web api/webservice来提供这个功能。平台是Linux。
9 个回答
3
虽然telnet几乎就是一个和终端连接的套接字,但其实并不完全一样。我认为在连接建立后,会有一些控制字符被传送。如果你的设备发送了一些意外的控制数据,可能会让你的程序感到困惑。
如果你还没有这样做,可以去下载wireshark(或者tshark或tcpdump)来监控你的连接。Wireshark(以前叫ethereal)是跨平台的,对于一些简单的操作来说,使用起来相当容易。你可以用tcp.port == 23来过滤数据。
4
telnet的协议其实很简单……你只需要建立一个TCP连接,然后发送和接收ASCII数据。就这么简单。
所以你真正需要做的就是写一个程序,先通过TCP连接,然后从TCP套接字读取字符,并解析这些字符来更新图形界面(GUI),或者根据用户在图形界面上的操作,把字符写回套接字。
具体怎么实现,主要取决于你用什么软件来构建你的界面。在TCP这边,简单地用一个事件循环配合select()就足够了。
10
如果你可以使用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()