您的位置:首页 > 理论基础 > 计算机网络

Socket2实现tcp端口扫描

2013-12-29 18:01 141 查看
主要的界面如下:



主要代码如下:

//对于每一个线程,传过去的参数
typedef struct ThreadParamStruct
{
CString strIP;            //要扫描的IP地址
UINT  uPort;            //要扫描的端口
BOOL  bNoOrder;            //是否按照随机的顺序扫描
CPortScan_TCPDlg *ptr;    //指向父线程的对话框
HTREEITEM TreeItem;        //指向结果要显示的树型控件节点
}THREADPARAM;


UINT ThreadCSocket2Scan(LPVOID pParam)
{
THREADPARAM *threadparam = (THREADPARAM*)pParam;
CString strIP = threadparam->strIP;
UINT uPort = threadparam->uPort;
CPortScan_TCPDlg *ptr = threadparam->ptr;
HTREEITEM TreeItem = threadparam->TreeItem;
BOOL bNoOrder = threadparam->bNoOrder;

g_iTotalThreadCount++;
if (bNoOrder)
{
Sleep(rand() % 3000);
}

SOCKET sock = -1;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == SOCKET_ERROR)
{
return 1;
}

int iTimeOut = 1000;
if (SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (TCHAR*)&iTimeOut, sizeof(iTimeOut)))
{
g_iTotalThreadCount--;
closesocket(sock);
return 2;
}
iTimeOut = 1000;
if (SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (TCHAR*)&iTimeOut, sizeof(iTimeOut)))
{
g_iTotalThreadCount--;
closesocket(sock);
return 3;
}

SOCKADDR_IN addr_remote;
addr_remote.sin_family = AF_INET;
addr_remote.sin_addr.S_un.S_addr = inet_addr(strIP);
addr_remote.sin_port = htons(uPort);
if (0 != connect(sock, (PSOCKADDR)&addr_remote, sizeof(addr_remote)))
{
g_iTotalThreadCount--;
closesocket(sock);
return 4;
}

CString strTemp;
if (uPort < 1024)
{
struct servent *se;
se = getservbyport(htons(uPort), _T("tcp"));
if (se != NULL)
{
strTemp.Format(_T("%d %s"), uPort, se->s_name);
}
else
{
strTemp.Format(_T("%d"), uPort);
}
}
else
{
strTemp.Format(_T("%d %s"), uPort, ptr->GetPortName(uPort, TRUE));
}
ptr->m_wndTreeResult.InsertItem(strTemp, 2, 2, TreeItem);

shutdown(sock, 2);
closesocket(sock);
g_iTotalThreadCount--;
return 0;
}


CString CPortScan_TCPDlg::GetPortName(UINT uPort, BOOL bIsTCP)
{
CString strRet;
if (bIsTCP)
{
switch (uPort)
{
case 1024:
case 1025:
case 1026:strRet = _T("常用动态分配的TCP端口"); break;
case 1080:strRet = _T("WinGate,IRC等防火墙管道"); break;
case 1243:strRet = _T("Sub-7木马"); break;
case 1433:strRet = _T("MSSQL数据库服务端口"); break;
case 1524:strRet = _T("ingreslock后门"); break;
case 2049:strRet = _T("NFS程序常用端口"); break;
case 3128:strRet = _T("Squid HTTP代理服务器"); break;
case 3306:strRet = _T("MySQL数据库服务端口"); break;
case 5632:strRet = _T("pcAnywere常用端口"); break;
case 31337:strRet = _T("Back Orifice"); break;
default:strRet = _T(""); break;
}
}
else
{
switch (uPort)
{
case 1024:
case 1025:
case 1026:strRet = _T("常用动态分配的UDP端口"); break;
case 31789:strRet = _T("Hack-a-tack远程访问木马"); break;
default:strRet = _T(""); break;
}
}
return strRet;
}


下载地址见后续博文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: