灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:6686回复:0

C# 单ip端口扫描工具 (多线程)

楼主#
更多 发布于:2014-04-03 10:33
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Diagnostics;

namespace 端口扫描
{
public partial class Form1 : Form
{
ThreadStart threadstart;
Thread[] thread;
int port; //当前正在扫描的端口
int portmax; //扫描端口最大值

public Form1()
{
InitializeComponent();
}

public bool IsPortOpen(string ip, int port) //判断某一计算机端口是否处于打开状态
{
try
{
TcpClient client = new TcpClient(); //创建一个TcpClient实例
IPAddress address = IPAddress.Parse(ip); //转化string类型的ip地址到IpAddress
client.Connect(address, port); //连接服务器address的port端口
client.Close(); //连接成功立即断开
return true;
}

catch (Exception e)
{
return false;
}
}

delegate void Show_Change(string input);
public void ShowProc(string input)
{
this.lab_show.Text = input;
}

public void ScanThread()
{
while (true)
{
int nowport;
lock (this)
{
if (port > portmax)
return;
else
{
//lab_show.Text = port.ToString();
this.BeginInvoke(new Show_Change(ShowProc), new object[] { port.ToString() });
nowport = port;
port++;
}
}
if(IsPortOpen(txt_ip.Text,nowport))
listBox_Return.Items.Add(nowport.ToString() + "端口............开放");
}
}

private void btn_scan_Click(object sender, EventArgs e)
{
listBox_Return.Items.Clear();
int ThreadCount = (int)numericUpDown_ThreadCount.Value; //线程数量
thread = new Thread[ThreadCount];
threadstart = new ThreadStart(ScanThread);
for (int i = 0; i < ThreadCount; i++)
{
Thread t = new Thread(threadstart);
thread = t;
}


portmax = (int)numericUpDown_Max.Value;
port = (int)numericUpDown_Min.Value;
for (int i = 0; i < ThreadCount; i++)
{
thread.Start();
}
}

private void Form1_Load(object sender, EventArgs e)
{
lab_show.Text = "";
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}

private void btn_ping_Click(object sender, EventArgs e) //ping按钮事件
{
string command = @"ping "+txt_UrlOrIp.Text;
txt_ping.Text = RunCmd(command);
}


public string RunCmd(string command) //运行cmd命令,并返回结果字符串
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/c" + command;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
return p.StandardOutput.ReadToEnd();
}


int[] port_array = { 21, 23, 80, 1433, 3306, 3389 }; //常用端口
string ip;
public void Scan()
{
for (int i = 0; i < port_array.Length; i++)
{
if (IsPortOpen(ip, port_array))
{
listBox1.Items.Add(port_array.ToString() + "端口.............开放");
listBox1.Items.Add("");
}
else
{

listBox1.Items.Add(port_array.ToString() + "端口.............关闭");
listBox1.Items.Add("");
}
}
}
private void btn_Start_Click(object sender, EventArgs e) //扫描计算机常用端口
{
listBox1.Items.Clear();
ip = txt_IpAlways.Text;
ThreadStart ts = new ThreadStart(Scan);
Thread th = new Thread(ts);
th.Start();
}

}
}

喜欢0 评分0
游客

返回顶部