Can';t执行lp netcat
我正在尝试从C执行以下命令:Can';t执行lp netcat,c,exec,netcat,C,Exec,Netcat,我正在尝试从C执行以下命令: netcat 127.0.0.1 4444 这是我的代码: #include <unistd.h> int main() { execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0); } #包括 int main(){ execlp(“/usr/bin/netcat”,“127.0.0.1”,“4444”,0); } 但是,我不断收到错误:错误:没有为连接指定端口 回答我认为可能会出现的几个问题:
netcat 127.0.0.1 4444
这是我的代码:
#include <unistd.h>
int main() {
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
}
#包括
int main(){
execlp(“/usr/bin/netcat”,“127.0.0.1”,“4444”,0);
}
但是,我不断收到错误:错误:没有为连接指定端口
回答我认为可能会出现的几个问题:
给出了哪个netcat
/usr/bin/netcat
- 我尝试过使用
,得到了相同的结果execvp
- 正常运行命令(即通过终端)是成功的(通常我也会给出
参数,但为了简单起见,我省略了它。添加它不会改变结果。)-e/bin/bash
- 问题是,您的第一个参数是“4444”。为什么?
请看这一行:
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
execlp()
的第一个参数是要执行的二进制文件。其余参数将形成传递给进程的argv[]
-向量
按照惯例,argv[0]
应该包含可执行文件的名称,第一个“real”参数是argv[1]
,在您的例子中是“4444”。因此,你所做的是等效于
网络猫4444
正确的答案是:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
顺便说一句,
execlp()
的使用只有在调用没有完整路径的二进制文件时才有意义,因为它会查找正确的路径本身(使用path环境变量)。否则,应使用execl()
。但它无论如何都会起作用。是的,我很笨,我完全忘记了这一点。谢谢