如何使用C / Objective C获取telnet结果?

这是一个telnet站点:

远程登录://202.85.101.136:8604 /

它来自香港公共图书馆,我可以编写一些程序来获取telnet服务的字符串/结果,并从C / Objective C发送请求吗? 你。

如果您的系统上已有telnet程序,则可以使用它来为您完成所有连接工作。 这是一个gnu / Linux程序,您可以将其作为起点。

它使用popen来执行系统的telnet命令。 然后它只读取管道中的所有数据(stdout,如果你刚刚从shell执行telnet命令)并打印它。 当没有更多数据要读取时,它会退出。

您可以通过以rw模式而不是r打开管道将数据发送到服务器,然后像编写任何其他文件一样进行写入。 您可以有条件地执行诸如扫描您的Username:名输入之类的内容,然后再发送用户名字符串,例如。

 #include  #include  int main(int argc, char *argv[]) { const char *cmd = "telnet 202.85.101.136 8604"; char buffer[256]; FILE *pipe = popen(cmd, "r"); if( !pipe ) { perror("popen"); exit(-1); } while( fgets(buffer, sizeof(buffer), pipe) != NULL && !feof(pipe) ) { if( ferror(pipe) ) { perror("fgets"); break; } /* Here you do whatever you want with the data. */ printf("%s", buffer); } pclose(pipe); return 0; } 

如果您使用的是Windows, 此链接将解释popen的替代方案。

还有一个名为Expect的程序可以帮助您自动化这样的东西。

当然有可能。 Telnet是一个非常简单的协议,您只需打开一个TCP套接字并将其连接到该IP和端口即可。 首次连接时,telnet服务器将使用RFC854中定义的二进制协议发送一些协商请求,客户端应该响应该协议。 协商完成后,您只需发送和接收ASCII数据进行通信,通常一次一行。

对于一个简单的“从主机获取一些数据”的telnet会话,您不试图进行真正的交互式会话,它有时可以简单地接受所有服务器协商设置,以避免实现整个协商协议。 要做到这一点,只需寻找服务器发送几个3字节命令,格式为:0xFF 0xFD xx,这基本上是服务器告诉你“我希望你使用选项X”,只需用0xFF 0xFB响应这个xx,基本上只是你同意服务器要求的任何内容。 然后,当您通过协商时,您只需要接收带有套接字读取的行并使用套接字写入发送命令。