无法执行 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);
}

但是,我不断收到错误消息:错误:没有为连接指定端口

回答几个我觉得可能会出现的问题:

  • 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()。但它无论如何都会起作用。

关于无法执行 netcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244669/

相关文章:

c++ - 如何处理覆盖某些函数名称的 WinAPI 宏?

c - 这是 C 标准中整数类型符号位定义的错误吗?

netcat - 通过netcat将十六进制字符串发送到远程

shell - 为什么 "(echo <Payload> && cat) | nc <link> <port>"会创建持久连接?

c - 从 .h 文件中删除未使用的函数原型(prototype)

带后台任务的 C shell

c - 如何在 c 中 fork 和 exec 后捕获环境?

PHP执行批处理文件开始记录ffmpeg并杀死ffmpeg

linux - 如何在 bash 中使用带有 -exec 的 'cat' 命令?

bash - 使用 netcat 发送 POST 请求