Can';t执行lp netcat

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); } 但是,我不断收到错误:错误:没有为连接指定端口 回答我认为可能会出现的几个问题:

我正在尝试从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
    给出了
    /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()
      。但它无论如何都会起作用。

      是的,我很笨,我完全忘记了这一点。谢谢