不能execlp netcat

问题描述 投票:1回答:1

我试图从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参数,但为了简单起见我省略了它。添加它不会改变结果。)
c exec netcat
1个回答
1
投票

问题是,你的第一个参数是“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()。但它无论如何都会奏效。

© www.soinside.com 2019 - 2024. All rights reserved.