主要的界面如下:

主要代码如下:

 //对于每一个线程,传过去的参数
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() % );
} SOCKET sock = -;
sock = socket(AF_INET, SOCK_STREAM, );
if (sock == SOCKET_ERROR)
{
return ;
} int iTimeOut = ;
if (SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (TCHAR*)&iTimeOut, sizeof(iTimeOut)))
{
g_iTotalThreadCount--;
closesocket(sock);
return ;
}
iTimeOut = ;
if (SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (TCHAR*)&iTimeOut, sizeof(iTimeOut)))
{
g_iTotalThreadCount--;
closesocket(sock);
return ;
} 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 ( != connect(sock, (PSOCKADDR)&addr_remote, sizeof(addr_remote)))
{
g_iTotalThreadCount--;
closesocket(sock);
return ;
} CString strTemp;
if (uPort < )
{
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, , , TreeItem); shutdown(sock, );
closesocket(sock);
g_iTotalThreadCount--;
return ;
}
 CString CPortScan_TCPDlg::GetPortName(UINT uPort, BOOL bIsTCP)
{
CString strRet;
if (bIsTCP)
{
switch (uPort)
{
case :
case :
case :strRet = _T("常用动态分配的TCP端口"); break;
case :strRet = _T("WinGate,IRC等防火墙管道"); break;
case :strRet = _T("Sub-7木马"); break;
case :strRet = _T("MSSQL数据库服务端口"); break;
case :strRet = _T("ingreslock后门"); break;
case :strRet = _T("NFS程序常用端口"); break;
case :strRet = _T("Squid HTTP代理服务器"); break;
case :strRet = _T("MySQL数据库服务端口"); break;
case :strRet = _T("pcAnywere常用端口"); break;
case :strRet = _T("Back Orifice"); break;
default:strRet = _T(""); break;
}
}
else
{
switch (uPort)
{
case :
case :
case :strRet = _T("常用动态分配的UDP端口"); break;
case :strRet = _T("Hack-a-tack远程访问木马"); break;
default:strRet = _T(""); break;
}
}
return strRet;
}

下载地址见后续博文。

最新文章

  1. java 静态内部类小总结
  2. python 字符串函数
  3. [转载]在 JavaScript 中判断“空值”
  4. 从头学Qt Quick(1) --体验快速构建动态效果界面
  5. 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
  6. activiti 学习( 三 ) 之 流程启动者
  7. 【Android 界面效果44】Android之圆头像实例
  8. 互联网组织的未来:剖析GitHub员工的任性之源
  9. sourceforge软件下载方式
  10. YUV / RGB 格式及快速转换算法
  11. 将1、2、3、……、n这n个连续自然数分成g组,使每组的和相等。g组中个数最多的一组有几个?
  12. servlet中的字符编码过滤器的使用
  13. Python_回调函数
  14. AngularJS DI(依赖注入)实现推测
  15. jenkins-参数化构建(一)
  16. P1035 调和级数
  17. python中 函数名加括号与不加括号
  18. raise TemplateDoesNotExist
  19. 含有选择器的 bootstrap菜单
  20. Android四大组件之一 -- Service详解

热门文章

  1. Hibernate——(5)持久化对象和一级缓存机制
  2. Excel创button宏调用
  3. Java--分布式系统高并发解决方案
  4. code first迁移(add-migration)的时候 后面信息不能有中文 中文报错 &quot;不支持给定路径的格式。&quot;
  5. C++ 11开发环境的搭建(Windows Platform)
  6. 微信小程序之商品属性分类
  7. windows8运行zxing源码 生成与解码二维码 详解(含注释与图解可直接运行)
  8. BigTable读后笔记
  9. C#同步SQL Server数据库Schema
  10. Mybatis 一对多 配置文件