使用C#winform编写渗透测试工具--端口扫描
使用C#winform编写渗透测试工具--端口扫描器
主要介绍使用C#winform编写渗透测试工具--端口扫描器,端口扫描器则是一种检测服务器或者主机虚拟端口是开启或关闭的工具。由于连接到局域网或互联网的计算机运行着不同服务,端口的存在允许同一台计算机上的不同应用程序同时共享网络资源。端口的范围为0到65535,0到1023的端口数最常用,它们中有许多是为FTP、SS-H、HTTP、telnet和DNS等服务保留的,1024到49151端口是注册端口,49152到65535则分配给动态或私人端口。
- 下面是软件运行的整体效果图,ip地址是一台本地主机,扫描结果显示该主机的80、135、445、443、139端口开启,并大概耗费0.52秒完成扫描。

目录
- 实现原理
- 功能介绍
- 代码实现
一、实现原理
扫描技术

TCP端口扫描一般分为以下几种类型:
TCP connect扫描:也称为全连接扫描,这种方式直接连接到目标端口,完成了TCP三次握手的过程,这种方式扫描结果比较准确,但速度比较慢而且可轻易被目标系统检测到。
TCP SYN扫描:也称为半开放扫描,这种方式将发送一个SYN包,启动一个TCP会话,并等待目标响应数据包。如果收到的是一个RST包,则表明端口是关闭的,而如果收到的是一个SYN/ACK包,则表示相应的端口是打开的。
Tcp FIN扫描:这种方式发送一个表示断开TCP连接的FIN包,让对方关闭连接。如果收到了一个RST包,则表明相应的端口是关闭的。
TCP XMAS扫描:这种方式通过发送PSH、FIN、URG、和TCP标志位被设为1的数据包。如果收到了一个RST包,则表明相应的端口是关闭的。
本篇则是使用TCP connect扫描进行端口检测
二、功能介绍

线程数:选择线程数实现多线程扫描;
超时时间:如果在超时时间范围内没有收到回复,表示端口关闭;
扫描方式:扫描方式分为常规扫描、全扫描和指定扫描
①常规扫描:对20, 21, 22, 23, 25, 53, 80, 81等常用端口进行扫描;
②全扫描:对0到65535端口进行扫描;
③指定扫描:对指定端口进行扫描。
三、代码实现
python脚本实现端口扫描
使用内建的库 multiprocessing.dummy 来实现多线程扫描
# coding: utf-8
import socket
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool
import sys
def scan_port(port):
ip = sys.argv[1]
try:
s = socket.socket(2, 1)
res = s.connect_ex((ip, port))
if res == 0: # 如果端口开启 发送 hello 获取banner
print('Port {}: OPEN'.format(port))
s.close()
except Exception as e:
print(str(e.message))
def init_set(ip_adress, threads, time, type, port_s, port_e):
remote_server_ip = ip_adress # ip地址
ports = []
print('-' * 60)
print('Please wait, scanning remote host ', remote_server_ip)
print('-' * 60)
socket.setdefaulttimeout(float(time)/1000.0) # 设置超时时间
if type == "全扫描":
for i in range(1, 65535):
ports.append(i)
elif type == "常规扫描":
ports = [20, 21, 22, 23, 25, 53, 80, 81, 102, 109, 110, 119, 135, 137, 138, 139, 161, 443, 445, 554, 1024, 1080,
1755, 4000, 5554, 5632, 8080] # 常规端口
else:
for i in range(int(port_s), int(port_e)+1):
ports.append(i)
# Check what time the scan started
t1 = datetime.now()
pool = ThreadPool(processes=int(threads)) # 创建进程
results = pool.map(scan_port, ports)
pool.close()
pool.join()
print('Multiprocess Scanning Completed in ', datetime.now() - t1) # 显示运行的时间
# 传递参数,包括 ip地址,线程数、超时时间、扫描类型、扫描起始端口和终止端口
init_set(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6])
C#调用脚本
对于python脚本中包含第三方模块的情况,同样,通过直接创建Process进程,调用python脚本,返回扫描结果。
- 创建按钮按下事件button1_Click,运行“调用python脚本”函数runPythonScan()
private void button4_Click(object sender, EventArgs e)
{
richTextBox2.Clear();
runPythonScan();//运行python函数
label17.Text = "开始扫描...";
}
- 实例化一个python进程 调用.py 脚本
void runPythonScan()
{
string ip = textBox2.Text;
string thread = comboBox4.Text;
string time = comboBox2.Text;
string type = comboBox5.Text;
string port_start = textBox3.Text;
string port_end = textBox4.Text;
p = new Process();
string path = "port_scan.py";//待处理python文件的路径,本例中放在debug文件夹下
string sArguments = path;
ArrayList arrayList = new ArrayList();
arrayList.Add(ip);//需要渗透的网站
arrayList.Add(thread);//线程数
arrayList.Add(time);//超时时间
arrayList.Add(type);//扫描类型
arrayList.Add(port_start);//起始端口
arrayList.Add(port_end);//终止端口
foreach (var param in arrayList)//拼接参数
{
sArguments += " " + param;
}
p.StartInfo.FileName = @"D:\Anaconda\python.exe"; //没有配环境变量的话,可以写"xx\xx\python.exe"的绝对路径。如果配了,直接写"python"即可
p.StartInfo.Arguments = sArguments;//python命令的参数
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();//启动进程
//MessageBox.Show("启动成功");
p.BeginOutputReadLine();
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived_scan);
Console.ReadLine();
//p.WaitForExit();
}
- 输出接收事件函数
void p_OutputDataReceived_scan(object sender, DataReceivedEventArgs e)
{
var printedStr = e.Data;
Action at = new Action(delegate ()
{
//接受.py进程打印的字符信息到文本显示框
richTextBox2.AppendText(printedStr + "\n");
label7.Text = "扫描结束";
});
Invoke(at);
}
github地址:https://github.com/Chenmengx/Penetration-testing-tool
使用C#winform编写渗透测试工具--端口扫描的更多相关文章
- #使用C#winform编写渗透测试工具--子域名挖掘
使用C#winform编写渗透测试工具--子域名挖掘 这篇文章主要介绍使用C#winform编写渗透测试工具--子域名挖掘.在渗透测试中,子域名的收集十分重要,通常一个网站的主站的防御能力特别强,而他 ...
- 使用C#winform编写渗透测试工具--暴力破解
使用C#winform编写渗透测试工具--暴力破解 这篇文章主要介绍使用C#winform编写渗透测试工具--暴力破解.暴力破解是指通过利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式.简单来说就 ...
- 使用C#winform编写渗透测试工具--敏感目录扫描
使用C#winform编写渗透测试工具--敏感目录扫描 由于之前在做渗透测试的时候,发现使用的工具较多,切换起来较麻烦,便萌生了开发一个包含各种渗透测试工具的小程序,包括敏感目录扫描.端口查询.子域名 ...
- 使用C#winform编写渗透测试工具--Web指纹识别
使用C#winform编写渗透测试工具--web指纹识别 本篇文章主要介绍使用C#winform编写渗透测试工具--Web指纹识别.在渗透测试中,web指纹识别是信息收集关键的一步,通常是使用各种工具 ...
- 使用C#winform编写渗透测试工具--SQL注入
使用C#winform编写渗透测试工具--SQL注入 本篇文章主要介绍使用C#winform编写渗透测试工具,实现SQL注入的功能.使用python编写SQL注入脚本,基于get显错注入的方式进行数据 ...
- github渗透测试工具库
本文作者:Yunying 原文链接:https://www.cnblogs.com/BOHB-yunying/p/11856178.html 导航: 2.漏洞练习平台 WebGoat漏洞练习平台: h ...
- github渗透测试工具库[转载]
前言 今天看到一个博客里有这个置顶的工具清单,但是发现这些都是很早以前就有文章发出来的,我爬下来后一直放在txt里吃土.这里一起放出来. 漏洞练习平台 WebGoat漏洞练习平台:https://gi ...
- 渗透测试工具BurpSuite做网站的安全测试(基础版)
渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...
- GyoiThon:基于机器学习的渗透测试工具
简介 GyoiThon是一款基于机器学习的渗透测试工具. GyoiThon根据学习数据识别安装在Web服务器上的软件(操作系统,中间件,框架,CMS等).之后,GyoiThon为已识别的软件执行有效的 ...
随机推荐
- NOIP模拟测试29「爬山·学数数·七十和十七」
爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...
- 删除主键时报错ORA-00955
一.利用已有索引创建主键1.建表GAO@PROD> create table abcd(id number(10),name1 varchar2(20)); Table created. 2.插 ...
- C#《大话设计模式》之模板方法模式学习笔记
static void Main(string[] args) { Console.WriteLine("学生甲抄的试卷:"); TestPaper A = new TestPap ...
- NAT网络地址转换技术
NAT网络地址转换技术 目录 一.NAT概述 1.1.概述 1.2.NAT 的应用场景 二.NAT的类型及配置命令 2.1.静态NAT 2.2.动态NAT 2.3.Easy IP 2.4.NATP 2 ...
- .NET Worker Service 部署到 Linux 作为 Systemd Service 运行
上一篇文章我们了解了如何将.NET Worker Service 作为 Windows 服务运行,今天我接着介绍一下如何将 Worker Service 部署到 Linux 上,并作为 Systemd ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- AWS上创建EKS(K8S)集群
1.注意事项及准备工作 EKS分为EKS Master和EKS Node两种角色;EKS Master为全托管,EKS Node为CloudFormation创建 EKS Node若在NAT网络里,一 ...
- ABP Framework V4.4 RC 新增功能介绍
目录 新增功能概述 启动模板删除 EntityFrameworkCore.DbMigrations 项目 CMS-Kit 动态菜单管理 Razor引擎对文本模板的支持 DbContext/Entiti ...
- HDU 4438 Hunters 区域赛水题
本文转载于 http://blog.csdn.net/major_zhang/article/details/52197538 2012天津区域赛最水之题: 题意容易读懂,然后就是分情况求出A得分的数 ...
- Linux系统下安装MongoDB
下载安装包 去MongoDB官网https://www.mongodb.com/try/download/community,下载社区版的安装包: 我的Linux系统是CentOS 7.5版本的,通常 ...