无法执行netcat

时间:2019-03-19 15:33:36

标签: 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);
}

但是,我不断收到错误消息:错误:未指定用于连接的端口

回答一些我可能会想到的问题:

  • which netcat给出/usr/bin/netcat
  • 我尝试使用execvp并获得了相同的结果
  • 正常(即通过终端)运行命令是成功的(通常我也提供-e /bin/bash参数,但为简单起见,我省略了它。添加它不会改变结果。)

1 个答案:

答案 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()。但是还是可以的。