我用CreateProcess()在vc中启动snort
如果参数是 snort.exe -v 就可以启动snort
但是 如果用snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf 就无法启动,或者控制台一闪而过,在任务管理器中没有这个进程,
有那位大虾能帮帮忙 谢谢
附源码:SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("创建匿名管道失败!");
return;
}
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess(NULL,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf",NULL,NULL, TRUE,CREATE_NO_WINDOW,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}
else
{
WaitForSingleObject(pi.hProcess,INFINITE);
WaitForSingleObject(pi.hThread,INFINITE);
}
如果参数是 snort.exe -v 就可以启动snort
但是 如果用snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf 就无法启动,或者控制台一闪而过,在任务管理器中没有这个进程,
有那位大虾能帮帮忙 谢谢
附源码:SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("创建匿名管道失败!");
return;
}
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess(NULL,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf",NULL,NULL, TRUE,CREATE_NO_WINDOW,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}
else
{
WaitForSingleObject(pi.hProcess,INFINITE);
WaitForSingleObject(pi.hThread,INFINITE);
}
其实就是
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);if(!CreateProcess(NULL,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c snort.conf",NULL,NULL, TRUE,CREATE_NO_WINDOW,NULL,NULL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}
else
{
WaitForSingleObject(pi.hProcess,INFINITE);
WaitForSingleObject(pi.hThread,INFINITE);
}
感觉是,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c snort.conf"
有问题 我用"..//snort//snort.exe -v"启动没有问题,然而把其它值得在snort源程序里面赋值也不行,
就不会一闪而过了,看提示的错误信息...
我试了你的方法,不知道具体这句话的意思~~
我直接通过任务管理器看通过命令提示符号 进程 cmd.exe 还有snort.exe进程
如果按照你的做法只能打开cmd.exe 而且也是一闪而过~~~
我试过 让snort只加参数 -v(不停的捕获数据包显示出来) 这样才能保证程序不会消失
直接到debug目录双击启动控制程序就可以了~~~