网络扫描器(c#)

一、新建项目

新建---->文件----->项目------>windows窗体应用程序----->scan.sln

二、设计界面

网络扫描器(c#)_第1张图片

三、写代码

网络扫描器(c#)_第2张图片
网络扫描器(c#)_第3张图片
网络扫描器(c#)_第4张图片


四、最后效果

1、打开虚拟机---->windowserver2003---->cmd---->ipconfig

得到ip地址192.168.67.131

2、输入:

网络扫描器(c#)_第5张图片
网络扫描器(c#)_第6张图片

3、在2003里输入

netstat -an -p tcp   可看到扫到1000以内的端口开放结果相同

网络扫描器(c#)_第7张图片

【scan.exe】

源代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Net.Sockets;//通信相关都会用到的命名空间

using System.Threading;//子线程

//using System.Diagnostics;

namespace scan

{

public partial class Form1 : Form

{

string addr = "";//放ip地址

int port;//放端口号

Thread scanthread;//定义一个子线程

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Control.CheckForIllegalCrossThreadCalls = false;

//子进程要使用父进程的控件时,要加这一句

}

private void button1_Click(object sender, EventArgs e)//扫描按钮

{

//创建主进程,从portscan函数开始执行

Thread process = new Thread(new ThreadStart(portscan));

process.Start();//启动进程

progressBar1.Minimum = 0;//最小值

progressBar1.Maximum = 1000;//最大值

listBox1.Items.Clear();//列表.项.清空

listBox1.Items.Add("扫描器v1.0");

listBox1.Items.Add("");//加空行

}

private void portscan()//一个进程分配为1000个子线程

{

listBox1.Items.Add("开始扫描,可能要等几分钟");

addr = textBox1.Text;//取出ip地址

for(int i=1;i<=1000;i++)//创建1000个子线程

{

port = i;

scanthread = new Thread(new ThreadStart(scan));

scanthread.Start();

System.Threading.Thread.Sleep(10);//每隔10ms,启动一个子线程

label2.Text = port.ToString();//label2提示当前扫描到哪个端口号了;port转换成字符串了

progressBar1.Value = port;//进度条

}

}

private void scan()

{

int i = port;

TcpClient myclient = null;

try//如果执行try子句出错,就跳到catch执行;正确则顺利执行

{

myclient = new TcpClient();

myclient.Connect(addr, port);//端口连接

listBox1.Items.Add("端口" + port.ToString() + "开放");

}

catch

{

if(i==1000)

{

listBox1.Items.Add("扫描结束!");

}

}

}

private void button2_Click(object sender, EventArgs e)//退出按钮

{

System.Environment.Exit(0);//父进程和子进程都退出

}

}

}

你可能感兴趣的:(网络扫描器(c#))