【发布时间】:2014-03-04 23:14:49
【问题描述】:
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 的功能,以及为什么它不起作用。
【问题讨论】: