在c\c++程序里怎么执行shell脚本命令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c\c++程序里怎么执行shell脚本命令?相关的知识,希望对你有一定的参考价值。

我想用nc命令测试udp端口的可用性。
在shell里直接输入命令行# nc -u 127.0.0.1 22,然后输入字符,如果可连接,不提示错误,否则提示nc: Write error: Connection refused。
如何把以上操作写成c/c++程序?

在C/C++源码中执行shell命令,最基本的就是 system() C库函数,其次可以使用系统提供的api函数,比如windows上的createprocess shellexecuteex等函数,在linux上可以使用exec()等等.

下面是我在windows上的弄的一个测试版本,使用了线程,我感觉用nc来测试,不如直接 netstat -an | findstr /I "udp" | findstr "22" ,因为22端口太其特了,很容易抓出来. 另外nc判断端口常规的作法就是 nc -vv ip port 看提示信息就好了.

#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h>
#include <process.h>
UINT __stdcall ThreadFunc(LPVOID lpParam)
//将hacker字符串做为nc提交的数据
int ret = system("echo hacker | nc.exe -u 127.1 22");
//ret==0说明没有开启22端口
if (ret == 0 ) printf("nc: Write error: Connection refused.\\n");
return 0;

int main()

HANDLE hThread = (HANDLE)_beginthreadex(0, 0, ThreadFunc, 0, 0, 0);
//等待3秒钟,说明22端口可用
WaitForSingleObject(hThread, 3000);
//结束测试线程
TerminateThread(hThread, 0);
//重新开启NC连接22端口
system("nc.exe -vv -u 127.1 22");
return 0;


欢迎光临0x30贴吧,一个高质量的计算机技术交流平台.追问

谢谢你的回答!
我现在编写了一点,代码如下:
char nc[1024];
memset(nc, 0, 1024);
sprintf(nc, "nc -uvzw2 %s %d > UdpPortCheck.txt", m_ip, m_port);
system(nc);
sleep(2);

其中nc -uvzw2 ip port 重定向到UdpPortCheck.txt中,我想知道现在用什么函数抓取文件中的字符串?

追答

fopen() fread()

参考技术A 执行shell命令的C / C + +源代码,基本系统()API函数的C库函数,第二,我们可以使用该系统,如Windows CreateProcess的ShellExecuteEx函数,可以用来在Linux上执行( ),依此类推。

后,在窗户上,我得到一个测试版本,使用线程测试我的感觉NC,不如直接netstat-an的| FINDSTR / I“UDP”FINDSTR“22”;因为22端口太特殊了,很容易中招了。另一个判断端口的惯常做法NC NC-VV IP端口的样子消息。

#包括
#包括
包括
#包括
包括
UINT __ stdcall调用约定的ThreadFunc(LPVOID lpParam)
/ /提交的数据被黑客字符串为:nc
诠释RET =系统(回声黑客nc.exe-U 127.1 22“);
/ / RET == 0指令打开22端口
(RET == 0)printf(”请NC:写错误:连接被拒绝。\ n“);
返回0;

廉政的main()

的HANDLE初的=(HANDLE)_beginthreadex(0,0,的ThreadFunc,0,0,0);
/ /等待3秒,说明22端口
WaitForSingleObject的(hThread 3000);
/ /结束测试线程 TerminateThread(初的,0);
/ /重新打开NC连接到22端口
系统(nc.exe 127.1-VV-U,22);
返回0;
/>
欢迎0X30糊状,高品质的电脑技术交流平台。

在shell脚本里如何表示回车

参考技术A 你可以获取当前输入,如果为null就继续执行,因为你输什么都要最后回车,为null的话就等于你输入了回车,应该达到你要的效果了

以上是关于在c\c++程序里怎么执行shell脚本命令?的主要内容,如果未能解决你的问题,请参考以下文章

linux下shell脚本怎样实现多行输出在屏幕上 只显示一行 后一行的输出在屏幕上会覆盖前一行的输出?

SQL*Plus中怎么执行多个*sql脚本文件

怎么在shell 里,中断shell中某个命令,再执行下个命令

C语言能否用在shell脚本

shell脚本里怎么替换掉某个文件的最后一行的最后一个字符

在windows中用shell遍历一个文件夹下得所有文件并对文件执行同一个指令