18,356
社区成员
发帖
与我相关
我的任务
分享
UINT ScanProc(LPVOID lpParam)
{
CString IP=((IPData*)lpParam)->IP;
SOCKET sd;
if((sd=socket(AF_INET,SOCK_STREAM,IPPROTO_IP))==INVALID_SOCKET)
{
++::g_Complate;
--::g_ActiveThread;
return -1;
}
unsigned long flag = 1;
if ((ioctlsocket(sd, FIONBIO, &flag) != 0))
{
++::g_Complate;
--::g_ActiveThread;
return -2;
}
SOCKADDR_IN sin;
sin.sin_addr.S_un.S_addr=inet_addr(IP);
sin.sin_family=AF_INET;
sin.sin_port=htons(::g_Port);
connect(sd,(SOCKADDR*)&sin,sizeof(sin));
struct fd_set mask;
FD_ZERO(&mask);
FD_SET(sd, &mask);
struct timeval timeout;
timeout.tv_sec = ::g_TimeOut/1000;
timeout.tv_usec =::g_TimeOut%1000;
if(select(0, NULL, &mask, NULL, &timeout)<=0)
{
++::g_Complate;
--::g_ActiveThread;
closesocket(sd);
return -3;
}
else
{
char cmd[513],cmd1[513];
memset(cmd,0,10);
memset(cmd1,0,10);
cmd[0]=5;
cmd[1]=2;
cmd[2]=0;
cmd[3]=2;
if(send(sd,cmd,4,0)!=4)
{
++::g_Complate;
--::g_ActiveThread;
closesocket(sd);
return -4;
}
Sleep(200);
if(recv(sd,cmd1,2,0)!=2)
{
++::g_Complate;
--::g_ActiveThread;
closesocket(sd);
return -5;
}
int index;
WaitForSingleObject(g_hEvent,INFINITE);
index=g_pDlg->m_result.GetItemCount();
g_pDlg->m_result.InsertItem(index,IP);
SetEvent(g_hEvent);
g_pDlg->m_result.SetItemText(index,1,::g_strPort);
switch(cmd1[1])
{
case 0x02:
g_pDlg->m_result.SetItemText(index,2,"password");
break;
case 0x00:
g_pDlg->m_result.SetItemText(index,2,"cool");
break;
default:
g_pDlg->m_result.SetItemText(index,2,"unknow");
break;
}
}
closesocket(sd);
++::g_Complate;
--::g_ActiveThread;
return 0;