无法执行 netcat
Can't execlp netcat
我正在尝试从 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()
的 first 参数是要执行的二进制文件。其余参数将构成传递给进程的 argv[]
-vector。
按照惯例,argv[0]
应该包含可执行文件的名称,第一个 "real" 参数是 argv[1]
,在您的例子中是“4444”。所以你所做的相当于
的shell
netcat 4444
正确的调用是:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
顺便说一句。 execlp()
的使用仅在调用没有完整路径的二进制文件时才有意义,因为它自己寻找正确的路径(使用 PATH 环境变量)。否则,应使用 execl()
。但无论如何它都会起作用。
我正在尝试从 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()
的 first 参数是要执行的二进制文件。其余参数将构成传递给进程的 argv[]
-vector。
按照惯例,argv[0]
应该包含可执行文件的名称,第一个 "real" 参数是 argv[1]
,在您的例子中是“4444”。所以你所做的相当于
netcat 4444
正确的调用是:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
顺便说一句。 execlp()
的使用仅在调用没有完整路径的二进制文件时才有意义,因为它自己寻找正确的路径(使用 PATH 环境变量)。否则,应使用 execl()
。但无论如何它都会起作用。