Pet*_*ter 5 c unix stdio netcat
的一个很酷的功能netcat是它如何将任何命令行程序转换为服务器。例如,在Unix系统上,我们可以通过将date二进制文件传递给来制作一个简单的日期服务器,netcat以便stdout通过套接字发送它:
netcat -l -p 2020 -e date
Run Code Online (Sandbox Code Playgroud)
然后,我们可以通过简单地发出以下命令从另一台机器上调用此服务:
netcat <ip-address> 2020
Run Code Online (Sandbox Code Playgroud)
/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;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我从另一个终端调用服务时,没有初始问候。实际上,问候语仅在发送一些信息后才打印。例如:
user@computer:~$ netcat localhost 2020
User
Please enter your name:
Hello there, User
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使问候语首先通过套接字发送,然后等待输入,然后发送最终消息(就像我直接调用二进制文件一样)?
我知道可能会有更好(甚至更安全)的方法来实现这样的系统,但是我对的功能netcat以及为什么它不起作用感到好奇。
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |