我正在尝试从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
参数,但为简单起见,我省略了它。添加它不会改变结果。)答案 0 :(得分:1)
问题是,您的第一个参数是“ 4444”。为什么?
看这行:
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
execlp()
的 first 参数是要执行的二进制文件。其余参数将构成传递给该过程的argv[]
-向量。
按照惯例,argv[0]
应该包含可执行文件的名称,第一个“真实”参数是argv[1]
,在您的情况下为“ 4444”。因此,您要做的就是在
netcat 4444
正确的呼叫应该是:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
顺便说一句。仅在调用不带完整路径的二进制文件时使用execlp()
才有意义,因为它本身会查找正确的路径(使用PATH环境变量)。否则,应使用execl()
。但是还是可以的。