我正在尝试从 C: 执行以下命令
netcat 127.0.0.1 4444
这是我的代码:
#include <unistd.h>
int main() {
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
}
但是,我不断收到错误消息:错误:没有为连接指定端口。
回答几个我觉得可能会出现的问题:
which netcat
给/usr/bin/netcat
- 我已经尝试使用
execvp
并得到了相同的结果 - 正常运行命令,即通过终端,成功(通常我也给出
-e/bin/bash
参数,但为了简单起见我省略了它。添加它不会改变结果。)
最佳答案
问题是,您的第一个参数是“4444”。为什么?
看这一行:
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
execlp()
的第一个 参数是要执行的二进制文件。其余参数将形成传递给进程的 argv[]
-vector。
按照惯例,argv[0]
应该包含可执行文件的名称,第一个“真正的”参数是 argv[1]
,即“4444”你的情况。所以你所做的是在 shell 上的等价物
netcat 4444
正确的调用应该是:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
顺便说一句。 execlp()
的使用只有在调用没有完整路径的二进制文件时才有意义,因为它会自己寻找正确的路径(使用 PATH 环境变量)。否则,应使用 execl()
。但它无论如何都会起作用。
关于无法执行 netcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244669/