我试图从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()
。但它无论如何都会奏效。