如何从C程序执行终端命令?

如何从C程序执行终端命令?,c,terminal,posix,reverse-shell,C,Terminal,Posix,Reverse Shell,我正在用C创建一个反向shell(只是为了练习),我不知道如何从我的C程序执行终端命令。我该怎么做呢?(我在POSIX系统上)(我想获得输出) 如何从我的C程序执行终端命令 ... (我想得到输出) 看看波本 范例 #include <stdio.h> int main(int argc, char ** argv) { if (argc != 2) { fprintf(stderr, "Usage: %s <command>\n", *argv);

我正在用C创建一个反向shell(只是为了练习),我不知道如何从我的C程序执行终端命令。我该怎么做呢?(我在POSIX系统上)(我想获得输出)

如何从我的C程序执行终端命令 ... (我想得到输出)

看看波本

范例

#include <stdio.h>

int main(int argc, char ** argv)
{
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <command>\n", *argv);
    return -1;
  }

  FILE * fp = popen(argv[1], "r");

  if (fp != 0) {
    char s[64];

    while (fgets(s, sizeof(s), fp) != NULL)
      fputs(s, stdout);

    pclose(fp);
  }

  return 0;
}
#包括
int main(int argc,字符**argv)
{
如果(argc!=2){
fprintf(标准,“用法:%s\n”,*argv);
返回-1;
}
FILE*fp=popen(argv[1],“r”);
如果(fp!=0){
chars[64];
while(fgets(s,sizeof(s),fp)!=NULL)
FPUT(s、stdout);
pclose(fp);
}
返回0;
}
汇编和执行:

bruno@bruno-XPS-8300:/tmp$ gcc -Wall o.c
bruno@bruno-XPS-8300:/tmp$ ./a.out date
samedi 11 avril 2020, 17:58:45 (UTC+0200)
bruno@bruno-XPS-8300:/tmp$ a.out "date | wc"
      1       6      42
bruno@bruno-XPS-8300:/tmp$ ./a.out "cat o.c"
#include <stdio.h>

int main(int argc, char ** argv)
{
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <command>\n", *argv);
    return -1;
  }

  FILE * fp = popen(argv[1], "r");

  if (fp != 0) {
    char s[64];

    while (fgets(s, sizeof(s), fp) != NULL)
      fputs(s, stdout);

    pclose(fp);
  }

  return 0;
}
bruno@bruno-XPS-8300:/tmp$ 
bruno@bruno-XPS-8300:/tmp$gcc-墙壁o.c
bruno@bruno-XPS-8300:/tmp$./a.过期日期
samedi 11 avril 2020,17:58:45(UTC+0200)
bruno@bruno-XPS-8300:/tmp$a.out“日期| wc”
1       6      42
bruno@bruno-XPS-8300:/tmp$./a.out“cat o.c”
#包括
int main(int argc,字符**argv)
{
如果(argc!=2){
fprintf(标准,“用法:%s\n”,*argv);
返回-1;
}
FILE*fp=popen(argv[1],“r”);
如果(fp!=0){
chars[64];
while(fgets(s,sizeof(s),fp)!=NULL)
FPUT(s、stdout);
pclose(fp);
}
返回0;
}
bruno@bruno-XPS-8300:/tmp$

查看函数popense
fork
exec
系列函数。