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; }
下载地址见后续博文。
相关文章推荐
- java实现Tcp端口扫描
- 实现数据库事务的简单方法ExecuteSqlTran()
- 实现可交互的 WINDOWS 服务
- .NET 指南:抽象化实现的基类
- ASP实现GIF格式验证码
- 使用反射在NET中实现动态工厂(第二部分)
- 使用开源Grid平台-GridGain实现网格计算
- (一)Java EE 5实现Web服务(Web Services)及多种客户端实例-原理
- 通过Global.asax实现简单的url重写
- 精通用Grails实现面向资源服务的架构
- QQ游戏百万人同时在线服务器架构实现
- 用VB实现循环队列算法
- 用JavaBridge 实现php调用java
- MAC官方菜单纯CSS实现灰色会换色
- WINCE实现网络更新程序(转)
- 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
- 使用 Amazon S3 云服务轻松实现存储(2)
- [转] 利用AJAX实现搜索提示功能 (关键字自动匹配功能)
- 使用邻接矩阵实现的图结构