ATL插件ping ip问题
大家好··我在插件里加上了一段判断ip能否ping通的代码(两种方法) 如下:
(第一种)bool IsIpThrohgh(string IpOrUrl)
{
string strCmd="ping ";
string strIP = IpOrUrl;
strCmd+=strIP;
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0)) {
return false;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,(LPTSTR)strCmd.c_str()
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) {
//MessageBox("Error on CreateProcess()");
return false;
}
if(WaitForSingleObject(pi.hProcess, 500)==WAIT_FAILED)
{
//MessageBox("Failed!");
return false;
}
CloseHandle(hWrite);
char buffer[4096] ={0} ;
DWORD bytesRead;
string strResult="";
for(int i = 0;i<2;i++)
{
if(ReadFile(hRead,buffer,4096,&bytesRead,NULL) != NULL)
{
strResult += buffer;
printf(buffer);
}
else
{
break;
}
}
if (strResult.find("TTL") != string::npos)
{
return true;
}
return false;
}
(第二种)int ping(const char * ip)
{
int ok = 1; FILE * f = 0;
char cmd[80]="";
sprintf(cmd, "ping %s > ping.txt", ip);
system(cmd);
f = fopen("ping.txt", "r");
if(!f) return 0;
while(!feof(f)) {
fgets(cmd, 80, f);
if(strstr(cmd, "timed out")) ok = 0;
}/*end while*/
system("del ping.txt");
return ok;
}
两种方法在ATL控件自动生成的测试页面(htm)上都可以实现ping通传进去的ip,但是整合到整个项目的jsp页面两种方法都不能ping通传进来的IP(和测试页面ping的同一个IP),请各位大神帮忙解决下啊··· = =谢谢
[解决办法]
这个取决于你是怎样和你的web服务器结合的,比如JNI?
还有基于服务器安全等方面的原因,可能存在执行权限的限制
最后,可以保留ping.txt文件,看看里面都有些什么内容?