Socket2实现tcp端口扫描
主要的界面如下:

主要代码如下:
//对于每一个线程,传过去的参数
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端口扫描的更多相关文章
- Python3实现TCP端口扫描
在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端 ...
- tcp端口扫描与syn扫描
连接网络设备时,一般都会在网络设备端选取0-65535之间的一个端口进行连接,端口扫描是指:检查网络设备上0-65535号端口哪些端口是开启状态.如果黑客扫描到某网络设备的80端口是开启状态,那么很有 ...
- TCP端口扫描
# TCP三次握手 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...
- tcp端口扫描(python多线程)
1 使用单线程扫描单台主机 首先实现的是对单台主机中0-1024端口的扫描,发现差不多每秒扫描一个端口,很慢. import socket def tcp_scanner(host,port): cl ...
- TCP端口扫描类型-隐蔽扫描和僵尸扫描
TCP扫描有三种类型:全连接扫描,隐蔽扫描,僵尸扫描.全连接扫描无须赘述. 隐蔽扫描:发送完SYN数据包以及收到SYN/ACK数据包后不再发送SCK数据包,由于没有建立完整的TCP连接,所以在目标主机 ...
- 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描
端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...
- 34.TCP非阻塞连接及套接字异常处理丶端口扫描脚本
TCP非阻塞及套接字异常处理: TCP阻塞套接字异常捕获: 套接字创建失败,8000 socket.error 客户端连接错误: ConnectionRefusedError socket.gaier ...
- Python3实现TCP端口扫描器
本文来自 高海峰对 玄魂工作室 的投稿 作者:高海峰 QQ:543589796 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可 ...
- Kali学习笔记9:端口扫描详解(上)
UDP端口扫描: 原理:回应ICMP不可达,代表端口关闭:没有回应,端口开启 建议了解应用层的UDP包头结构,构建对应的UDP数据包用来提高准确度 另外:所有的扫描都存在误判情况 我们用Scapy写个 ...
随机推荐
- window.url.createobjecturl 兼容多种浏览器(IE,google,360,Safari,firefox)
<script type="text/javascript"> function setImagePreview() { var docObj = document.g ...
- oc面试攻略
原文出自:http://mobile.51cto.com/iphone-402619.htm 1.Object-C有多继承吗?没有的话用什么代替?cocoa 中所有的类都是NSObject 的子类 多 ...
- Bean行为破坏之前,
而在自定义初始化阶段的行为之一似.Spring此外,它提供了两种方法来定制Bean具体的行为破坏之前. 例如下列: 1.采用destroy-method属性. 2.达到DisposableBean介面 ...
- 如何JOPtionPane的showConfirmDialog对话框button设置监视器
只是最近才知道javaGUI编程.我认为,独立撰写一个记事本,要在其中的对话框过程button设置监视器.但找了一下api相应的方法已被发现,只有找到: Returns: an integer ind ...
- 并发-Java并发编程基础
Java并发编程基础 并发 在计算机科学中,并发是指将一个程序,算法划分为若干个逻辑组成部分,这些部分可以以任何顺序进行执行,但与最终顺序执行的结果一致.并发可以在多核操作系统上显著的提高程序运行速度 ...
- Asp.net固定功能位充满了零(解决,演示样本)!
Asp.net固定功能位充满了零(解决.演示样本)! 在发展,其中,数实现出现8数字.但是,需要使用0加厚.例如:123,代表:0000123. 真实的比例,如下: decimal aaa = 123 ...
- AntDesign Form表单字段校验的三种方式
1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator中的rules验证.rules中定义校验规则,message为校验不通过时的提示文字. ...
- 【Java】使用记事本运行第一个Java程序
要编写java程序,java sdk必不可少,mac OS系统自带sdk,如果觉得版本太低,可以去官网下载最新的. 打开终端,新建一个HelloWorld.java文件: vim HelloWorld ...
- spring boot mybatis XML文件读取properties配置信息
配置文件application.properties中相关配置信息可以在部署以后修改,引用配置信息可以在代码和mybatis的映射文件中 1.JAVA代码 可以通过变量去读取 application. ...
- javascript-DOM学习
javascript-DOM学习 DOM document(html) object modle document对象(DOM核心对象) dom能用来干什么? 对html元素的样式(颜色.大小.位置等 ...