主要的界面如下:

主要代码如下:

 //对于每一个线程,传过去的参数
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;
}

下载地址见后续博文。

Socket2实现tcp端口扫描的更多相关文章

  1. Python3实现TCP端口扫描

    在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端 ...

  2. tcp端口扫描与syn扫描

    连接网络设备时,一般都会在网络设备端选取0-65535之间的一个端口进行连接,端口扫描是指:检查网络设备上0-65535号端口哪些端口是开启状态.如果黑客扫描到某网络设备的80端口是开启状态,那么很有 ...

  3. TCP端口扫描

    # TCP三次握手 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...

  4. tcp端口扫描(python多线程)

    1 使用单线程扫描单台主机 首先实现的是对单台主机中0-1024端口的扫描,发现差不多每秒扫描一个端口,很慢. import socket def tcp_scanner(host,port): cl ...

  5. TCP端口扫描类型-隐蔽扫描和僵尸扫描

    TCP扫描有三种类型:全连接扫描,隐蔽扫描,僵尸扫描.全连接扫描无须赘述. 隐蔽扫描:发送完SYN数据包以及收到SYN/ACK数据包后不再发送SCK数据包,由于没有建立完整的TCP连接,所以在目标主机 ...

  6. 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

    端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...

  7. 34.TCP非阻塞连接及套接字异常处理丶端口扫描脚本

    TCP非阻塞及套接字异常处理: TCP阻塞套接字异常捕获: 套接字创建失败,8000 socket.error 客户端连接错误: ConnectionRefusedError socket.gaier ...

  8. Python3实现TCP端口扫描器

    本文来自 高海峰对 玄魂工作室 的投稿 作者:高海峰 QQ:543589796 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可 ...

  9. Kali学习笔记9:端口扫描详解(上)

    UDP端口扫描: 原理:回应ICMP不可达,代表端口关闭:没有回应,端口开启 建议了解应用层的UDP包头结构,构建对应的UDP数据包用来提高准确度 另外:所有的扫描都存在误判情况 我们用Scapy写个 ...

随机推荐

  1. mysql创建用户、赋予指定权限命令

    1.远程登录mysql mysql -h ip -u root -p 密码 2.创建用户 格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码 ...

  2. JEECG 什么是商业版本的功能最近添加的好友?

    JEECG 商业版本号近期新增什么功能啦? 2014-12-18 JEECG JEECG jeecg添加新的功能啦! !. 1.流程设计器 2.集成工作流引擎activit,智能化封装,在线配置表单, ...

  3. matlab、sklearn 中的数据预处理

    数据预处理(normalize.scale) 0. 使用 PCA 降维 matlab: [coeff, score] = pca(A); reducedDimension = coeff(:,1:5) ...

  4. WSL探索及WSLAPI调用记录

    以前都是在虚拟机上安装linux,居然刚知道win10有WSL(Windows Subsystem for Linux)可以直接在win10上安装linux,消耗低,效率高,很赞,趁着干兴趣把WSL探 ...

  5. 经典书单 —— 语言/算法/机器学习/深度学习/AI/CV/PGM

    0.0 计算机科学 <Lex 与 Yacc> Think Complexity(使用 Python 语言) GitHub - AllenDowney/ThinkComplexity: Co ...

  6. 我已经写了DAL层的代码生成器

    (1)创建您自己的解决方案 文件夹结构如以下: (2)编写代码: (要使用数据库 建议创建随意数据库就可以) 创建配置文件App.config代码例如以下: <?xml version=&quo ...

  7. 组态档(configuration file)与建构档

    组态档,或者叫 configuration file,配置文件.组态档是用一种建构软件专用的特殊编程语言写的 CMake 脚本. 使用组态档能改变程序的设置,而不用重新编译程序. CMake 的组态档 ...

  8. Laravel 5.2 中多用户认证实现(前台和后台登录)

    Laravel 5.2中多用户认证支持,即同时允许不同数据表用户(如前台用户.后台用户.app用户等)登录认证.下面我们就来简单介绍多用户登录及注册功能实现. 1.生成认证脚手架 首先我们使用Lara ...

  9. Asp.net-MyFirstMVCProject详细解释

    一个URL要求, ASP.NET MVC引擎将分析URL要使用Controller, 这个Controller(取而代之的是,真实的方法Controller的Action)从数据库或者其它数据源获取数 ...

  10. GTK+浅谈之一Windows10下QtCreator中GTK+环境搭建(十几篇)

    一.简介 虽然GTK+是Linux下的开发环境,因为其跨平台特性,有时候需要在Windows上用到它的.如下是在Windows10下配置GTK+的开发环境.        Gnome的开发基础结构是围 ...