< p >
那么我们可以通过简单地发出命令来从另一台机器上调用此服务:
我需要怎样做才能通过套接字发送我的问候语,然后等待输入,最后发送最终消息(就像我直接调用二进制文件一样)?
我知道可能有更好(和可能更安全)的方法来实现这样的系统,但我对
netcat
的一个很酷的功能是它可以将任何命令行程序变成服务器。例如,在 Unix 系统上,我们可以通过将 date
二进制文件传递给 netcat
,使其 stdout
通过套接字发送来创建一个简单的日期服务器:
netcat -l -p 2020 -e date
那么我们可以通过简单地发出命令来从另一台机器上调用此服务:
netcat <ip-address> 2020
即使是一个 shell 也可以连接(/bin/sh
),但我知道这是极不推荐的,会有很大的安全隐患。
同样地,我尝试编写自己的简单 C 程序,既可以从 stdin
读取,也可以向 stdout
写入:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
char buffer[20];
printf("Please enter your name:\n");
fgets(buffer, 20, stdin);
printf("Hello there, %s\n", buffer);
return 0;
}
然而,当我从另一个终端调用该服务时,没有初始的问候语;事实上,只有在发送一些信息之后,才会打印问候语。例如:
user@computer:~$ netcat localhost 2020
User
Please enter your name:
Hello there, User
我需要怎样做才能通过套接字发送我的问候语,然后等待输入,最后发送最终消息(就像我直接调用二进制文件一样)?
我知道可能有更好(和可能更安全)的方法来实现这样的系统,但我对
netcat
的功能很感兴趣,想知道为什么这不起作用。
setbuf
来禁用,例如:setbuf(stdout, NULL);
。 - Peter