文章目录

  • 一、单线程扫描
    • 1.代码
    • 2.界面
    • 3.结果
    • 4.抓包
  • 二、多线程扫描
    • 1.代码
    • 2.界面
    • 3.结果
    • 4.抓包
  • 三、总结
  • 四、源码
    • 1.github
    • 2.gitee

一、单线程扫描

1.代码

using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
using System.Threading;
namespace MultithreadingScanningPort
{public partial class Form1 : Form{private bool[] ports = new bool[65536];public Form1(){InitializeComponent();panel5.Hide();}private void button1_Click(object sender, EventArgs e){if(int.Parse(beginPortText.Text)<0 || int.Parse(beginPortText.Text) > int.Parse(endPortText.Text)  || int.Parse(endPortText.Text)>65565){messages.Items.Add("端口错误!");return;}messages.Items.Clear();messages.Items.Add("开始扫描.......");ScanningPort();}public void ScanningPort() {int start = int.Parse(beginPortText.Text);int end = int.Parse(endPortText.Text);messages.Items.Add("起始端口"+start);messages.Items.Add("结束端口" + end);for (int i = start; i <= end; i++){Scanning(i);}messages.Items.Add("端口扫描结束");}public void Scanning(int port) {this.ports[port] = true;try {TcpClient tmp = new TcpClient(ipAddressText.Text, port);messages.Items.Add("端口" + port + "开放");}catch(System.Exception ex){}}}
}

2.界面

3.结果

由于是单线程执行,在扫描端口的时候程序会直接卡死。所以只简单扫描几个端口

4.抓包

由于是通过以太网发送的,建议先注销哆点再进行抓包,减少数据。
可以发现3900端口成功实现三次握手,即该端口是开放的。而其他端口(红色)则是无法建立连接,意味着是关闭的。

二、多线程扫描

1.代码

using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace SingleThreadScanningPort
{public partial class Form1 : Form{private bool[] ports = new bool[65536];//所有端口号private static int port=0;//当前端口号private static int count = 0;//开放端口号数量public Form1(){InitializeComponent();//CheckForIllegalCrossThreadCalls设置为false;然后就能安全的访问窗体控件CheckForIllegalCrossThreadCalls = false;//初始化进度显示为空label2.Text = "";//停止扫描按钮为不可用stopScanning.Enabled = false;}private void beginScanning_Click(object sender, EventArgs e){//检查端口号if (int.Parse(beginPortText.Text) < 0 || int.Parse(beginPortText.Text) > int.Parse(endPortText.Text) || int.Parse(endPortText.Text) > 65565){messages.Items.Add("端口错误!");return;}//新建线程执行扫描端口函数Thread procss = new Thread(new ThreadStart(ScanningPort));procss.Start();//设置进度条最大值最小值分别为结束端口和起始端口progressBar1.Maximum = int.Parse(endPortText.Text) - int.Parse(beginPortText.Text);progressBar1.Minimum = 0;//判断是否为继续扫描if (port == 0){messages.Items.Clear();messages.Items.Add("开始扫描.......");}elsemessages.Items.Add("继续扫描......");//开始扫描禁用,停止扫描启用beginScanning.Enabled = false;stopScanning.Enabled = true;}public void ScanningPort(){int start;int end = int.Parse(endPortText.Text);//判断是否为继续扫描,如果是则继续扫描,否则重新扫描if (port != 0)start = port;elsestart = int.Parse(beginPortText.Text);messages.Items.Add("起始端口" + start);messages.Items.Add("结束端口" + end);for (int i = start; i <= end; i++){//按下停止扫描后开始扫描按钮启用,此时停止扫描if (beginScanning.Enabled)break;port = i;//新建线程进行扫描Thread thread = new Thread(Scanning);thread.Start();//主线程休眠10msSystem.Threading.Thread.Sleep(10);//修改进度条的值progressBar1.Value = i- int.Parse(beginPortText.Text);//显示端口号以及进度label2.Text = "正在扫描端口: " + i+"  进度: "+Math.Round(( (i - int.Parse(beginPortText.Text)) *100.0 / progressBar1.Maximum),2)+"%";progressBar1.PerformStep();}if (port != 0)beginScanning.Text = "继续扫描";else{messages.Items.Add("端口扫描结束");messages.Items.Add("共有 " + count + " 个端口开放");}beginScanning.Enabled = true;stopScanning.Enabled = false;//判断是否扫描完毕if (int.Parse(endPortText.Text) == port){port = 0;beginScanning.Text = "开始扫描";}}public void Scanning(){this.ports[port] = true;try{TcpClient tmp = new TcpClient(ipAddressText.Text, port);messages.Items.Add("端口" + port + "开放");count++;}catch (System.Exception ex){}}private void stopScanning_Click(object sender, EventArgs e){//按下停止按钮后,开始按钮和停止按钮状态翻转beginScanning.Enabled = true;stopScanning.Enabled = false;}}
}

2.界面

3.结果

不会出现单线程的卡死,扫描速度也大大提升。同时可以随时开始和暂停操作。

4.抓包

和单线程的抓包思路以及结果都是一样的

三、总结

单线程操作的时候会出现界面直接卡死并且扫描速度很慢,
多线程操作扫描速度大大提升而且不会出现界面卡死。

四、源码

1.github

https://github.com/TangtangSix/SingleThreadScanningPort

https://github.com/TangtangSix/MultithreadingScanningPort

2.gitee

https://gitee.com/tangtangsix/SingleThreadScanningPort
https://gitee.com/tangtangsix/MultithreadingScanningPort

C# 基于TCP 实现扫描指定ip端口相关推荐

  1. php 根据ip 扫描端口,python实现指定ip端口扫描方式

    在Linux中判断一台主机是否可达,可以使用ping命令,而判断端口是否打开,可以使用telnet命令,但是telnet命令没有超时时间的参数,使用起来不是很方便,那么可以利用Python来完成一个端 ...

  2. zenmap扫描ip段_zenmap端口扫描工具(ip端口扫描器)V7.71 最新版

    zenmap端口扫描工具(ip端口扫描器)是一款功能强大的端口漏洞扫描工具.害怕出现端口漏洞?zenmap端口扫描工具(ip端口扫描器)轻松帮助用户.功能与NMap一致,交互性好,界面输出更为直观,可 ...

  3. python实现指定ip端口扫描

    在Linux中判断一台主机是否可达,可以使用ping命令,而判断端口是否打开,可以使用telnet命令,但是telnet命令没有超时时间的参数,使用起来不是很方便,那么可以利用Python来完成一个端 ...

  4. centos7开启tcp6_centos中docker映射出来的端口被tcp6监听,而没有被tcp监听导致ip+端口无法进行访问...

    如图,我通过docker构建容器时,映射出来的端口是8081,但是通过ip+8081无法访问,在检查了一遍安全组规则是否开放,以及百度以后查到是由于端口被tcp6监听,没有被tcp监听到导致的. 按照 ...

  5. SQL Server 默认和命名实例连接问题-TCP/IP 端口

    TCP/IP的基本工作原理这里就不浪费口水了.现在这网络年代,谁不知道TCP/IP啊.不要跟我抬杠说你偏就没听说过TCP/IP阿,真是这样那你得自己去补补课了. TCP/IP协议有两个基本的东西,一个 ...

  6. linux端口扫描脚本ip段,Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  7. Python IP端口扫描器源码

    import socket import threading from queue import Queue import time, sys def socket_Exec(task):que, i ...

  8. dubbo指定服务提供者ip_使用指定IP调用Dubbo服务

    一.前言 前面我们探讨了如何获取某一个Dubbo的服务的提供者列表,本节我们探讨如何使用Dubbo的扩展,实现指定IP调用. 二.实现 在Dubbo中集群容错策略Cluster是SPI扩展接口,DUb ...

  9. 第七章(五)—主动信息收集—端口扫描(基于TCP全连接扫描、隐蔽扫描、僵尸扫描、UDP的端口扫描)

    `## 端口扫描 端口对应网络服务及应用端程序 服务端程序的漏洞通过端口攻入 发现开放的端口 更具体的攻击面 UDP端口扫描 向某一端口发送UDP数据包,如果目标ip给我一个ICMP prot-unr ...

最新文章

  1. h5 返回上一页并且刷新页面
  2. WebAPI(part5)--排他操作
  3. Diango博客--15.通过 Django Pagination 实现简单分页(一)
  4. [Android]BaseExpandableListAdapter实现可折叠列表
  5. Python框架篇之Django(基本流程、命令行、配置文件)
  6. Linux学习笔记13--使用mount命令挂载CDROM
  7. 最大似然参数估计的求解
  8. 跑马灯java代码_[Java教程]JQ跑马灯
  9. WIFI安全测试之WPS(PIN)加密暴力破解
  10. 选中的磁盘具有mbr分区表。在efi_电脑磁盘怎么重建主引导记录mbr【详细步骤】...
  11. (win11)VMware虚拟机Ubuntu系统--C语言(操作系统实验课)
  12. java中公钥,私钥,pkcs1格式,pkcs8格式互转
  13. 如何在微信中调试时 打开v Console
  14. 攻防世界-pwn-forgot
  15. URL is not registered
  16. 突发!美国股市大跌,好戏才刚刚开始!(深度)
  17. GPU上大规模稀疏矩阵特征值计算高效算法之三——SLEPc测试
  18. colab中遇到“THC/THC.h: No such file or directory”的解决办法
  19. 读书笔记-增量学习-LwF_Learning without Forgetting
  20. python编程 注释

热门文章

  1. Revit翻模 | 千呼万唤始上架的『图转喷淋』到底妙在哪里?
  2. python 正则表达式 re 爬取网页及分析总结
  3. VDA 6.3 2022 EN 黄皮书.最新版 汽车质量VDA6.3-2022过程审核
  4. HTML设置文字与段落格式
  5. 双 JK 触发器 74LS112 逻辑功能。真值表_必看好文-MOS管构成的基本门逻辑电路解析...
  6. 软考中项-系统集成项目管理工程师-冲刺培训-王安-专题视频课程
  7. 中科院刘康:低资源环境下的事件知识抽取
  8. 俞军PM12条军规+产品决策简单三步法
  9. CMMI的5个等级简单介绍
  10. 土地利用覆被变化的概念_土地利用与土地覆被变化研究综述