http://www.uncj.net/news/show.aspx?id=78

解决方案 »

  1.   

    //拷贝过去,建一个工程,编译就可以
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Net.Sockets;
    using System.Threading;namespace PortScanner
    {
    public class MainApp: System.Windows.Forms.Form
    {
    private System.Windows.Forms.TextBox txtAddr;
    private System.Windows.Forms.TextBox txtStart;
    private System.Windows.Forms.TextBox txtEnd;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.Label label3;
    private System.Windows.Forms.Splitter splitter1;
    private System.Windows.Forms.ListBox lbResult;
    private System.Windows.Forms.Button btnScan;
    private System.Windows.Forms.ProgressBar progressBar1;
    private System.Windows.Forms.Label lblStart;
    private System.Windows.Forms.Label lblStop;
    private System.Windows.Forms.Label lblNow;
    private int port;
    private string Addr;
    private bool[] done = new bool[65536];
    private int start;
    private int end;
    private Thread scanThread;
    private bool OK;
    public MainApp() 
    {
    InitializeComponent();
    } private void InitializeComponent()
    {
    this.lbResult = new System.Windows.Forms.ListBox();
    this.txtAddr = new System.Windows.Forms.TextBox();
    this.txtStart = new System.Windows.Forms.TextBox();
    this.txtEnd = new System.Windows.Forms.TextBox();
    this.label1 = new System.Windows.Forms.Label();
    this.label2 = new System.Windows.Forms.Label();
    this.label3 = new System.Windows.Forms.Label();
    this.splitter1 = new System.Windows.Forms.Splitter();
    this.btnScan = new System.Windows.Forms.Button();
    this.progressBar1 = new System.Windows.Forms.ProgressBar();
    this.lblStart = new System.Windows.Forms.Label();
    this.lblStop = new System.Windows.Forms.Label();
    this.lblNow = new System.Windows.Forms.Label();
    this.SuspendLayout();
    // 
    // lbResult
    // 
    this.lbResult.Dock = System.Windows.Forms.DockStyle.Right;
    this.lbResult.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.lbResult.ItemHeight = 14;
    this.lbResult.Location = new System.Drawing.Point(224, 0);
    this.lbResult.Name = "lbResult";
    this.lbResult.Size = new System.Drawing.Size(264, 270);
    this.lbResult.TabIndex = 0;
    // 
    // txtAddr
    // 
    this.txtAddr.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.txtAddr.Location = new System.Drawing.Point(72, 16);
    this.txtAddr.Name = "txtAddr";
    this.txtAddr.Size = new System.Drawing.Size(136, 22);
    this.txtAddr.TabIndex = 1;
    this.txtAddr.Text = "";
    // 
    // txtStart
    // 
    this.txtStart.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.txtStart.Location = new System.Drawing.Point(72, 48);
    this.txtStart.Name = "txtStart";
    this.txtStart.Size = new System.Drawing.Size(136, 22);
    this.txtStart.TabIndex = 2;
    this.txtStart.Text = "";
    this.txtStart.TextChanged += new System.EventHandler(this.txtStart_TextChanged);
    // 
    // txtEnd
    // 
    this.txtEnd.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.txtEnd.Location = new System.Drawing.Point(72, 80);
    this.txtEnd.Name = "txtEnd";
    this.txtEnd.Size = new System.Drawing.Size(136, 22);
    this.txtEnd.TabIndex = 3;
    this.txtEnd.Text = "";
    this.txtEnd.TextChanged += new System.EventHandler(this.txtEnd_TextChanged);
    // 
    // label1
    // 
    this.label1.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.label1.Location = new System.Drawing.Point(8, 16);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(64, 23);
    this.label1.TabIndex = 4;
    this.label1.Text = "主机地址";
    // 
    // label2
    // 
    this.label2.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.label2.Location = new System.Drawing.Point(8, 80);
    this.label2.Name = "label2";
    this.label2.Size = new System.Drawing.Size(64, 23);
    this.label2.TabIndex = 5;
    this.label2.Text = "结束端口";
    // 
    // label3
    // 
    this.label3.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.label3.Location = new System.Drawing.Point(8, 48);
    this.label3.Name = "label3";
    this.label3.Size = new System.Drawing.Size(64, 23);
    this.label3.TabIndex = 6;
    this.label3.Text = "起始端口";
      

  2.   

    // 
    // splitter1
    // 
    this.splitter1.Dock = System.Windows.Forms.DockStyle.Right;
    this.splitter1.Location = new System.Drawing.Point(221, 0);
    this.splitter1.Name = "splitter1";
    this.splitter1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
    this.splitter1.Size = new System.Drawing.Size(3, 273);
    this.splitter1.TabIndex = 7;
    this.splitter1.TabStop = false;
    // 
    // btnScan
    // 
    this.btnScan.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.btnScan.Location = new System.Drawing.Point(72, 200);
    this.btnScan.Name = "btnScan";
    this.btnScan.TabIndex = 8;
    this.btnScan.Text = "扫描";
    this.btnScan.Click += new System.EventHandler(this.btnScan_Click);
    // 
    // progressBar1
    // 
    this.progressBar1.Location = new System.Drawing.Point(8, 112);
    this.progressBar1.Name = "progressBar1";
    this.progressBar1.Size = new System.Drawing.Size(200, 23);
    this.progressBar1.Step = 1;
    this.progressBar1.TabIndex = 9;
    // 
    // lblStart
    // 
    this.lblStart.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.lblStart.Location = new System.Drawing.Point(8, 144);
    this.lblStart.Name = "lblStart";
    this.lblStart.Size = new System.Drawing.Size(48, 23);
    this.lblStart.TabIndex = 10;
    // 
    // lblStop
    // 
    this.lblStop.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.lblStop.Location = new System.Drawing.Point(160, 144);
    this.lblStop.Name = "lblStop";
    this.lblStop.Size = new System.Drawing.Size(48, 23);
    this.lblStop.TabIndex = 11;
    // 
    // lblNow
    // 
    this.lblNow.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.lblNow.Location = new System.Drawing.Point(84, 144);
    this.lblNow.Name = "lblNow";
    this.lblNow.Size = new System.Drawing.Size(48, 23);
    this.lblNow.TabIndex = 12;
    // 
    // MainApp
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
    this.ClientSize = new System.Drawing.Size(488, 273);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
      this.lblNow,
      this.lblStop,
      this.lblStart,
      this.progressBar1,
      this.btnScan,
      this.splitter1,
      this.label3,
      this.label2,
      this.label1,
      this.txtEnd,
      this.txtStart,
      this.txtAddr,
      this.lbResult});
    this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    this.Name = "MainApp";
    this.Text = "端口扫描器";
    this.ResumeLayout(false); }
      

  3.   

    [STAThread]
    static void Main() 
    {
    Application.Run(new MainApp());
    } private void btnScan_Click(object sender, System.EventArgs e)
    {
                Thread process = new Thread(new ThreadStart(PortScan));
    process.Start();
    progressBar1.Minimum=Int32.Parse(txtStart.Text);
    progressBar1.Maximum=Int32.Parse(txtEnd.Text);
    lbResult.Items.Clear();
    lbResult.Items.Add("端口扫描器 v1.0.");
    lbResult.Items.Add("");
    } private void PortScan()
    {
    start =Int32.Parse(txtStart.Text);
    end = Int32.Parse(txtEnd.Text);
    if ((start >= 0 && start <= 65536) && (end >= 0 && end <= 65536)) 
    {
    lbResult.Items.Add("开始扫描... (可能需要请您等待几分钟)");
    Addr = txtAddr.Text;
    for (int i=start; i<=end; i++) 
    {
    port = i;
                        scanThread = new Thread(new ThreadStart(Scan));
    scanThread.Start();
    System.Threading.Thread.Sleep(100);
    progressBar1.Value=i;
    lblNow.Text=i.ToString();
    }
    while (!OK) 
    {
    OK = true;
    for (int i=start; i<=end; i++) 
    {
    if (!done[i]) 
    {
    OK = false;
    break;
    }
    }                    
    System.Threading.Thread.Sleep(1000);
    }
    lbResult.Items.Add("扫描结束!");

    else 
    {
    MessageBox.Show("可用的端口范围为[0-65536]");
    }
    } private void Scan() 
    {
    int portnow=port;
    Thread Threadnow=scanThread;
    done[portnow]=true;
    TcpClient objTCP=null;

    try
    {
    objTCP = new TcpClient(Addr, portnow);
    lbResult.Items.Add("端口 " + portnow.ToString() + " 开放!");
    }
    catch
    {}
    } private void txtStart_TextChanged(object sender, System.EventArgs e)
    {
    lblStart.Text=txtStart.Text;
    } private void txtEnd_TextChanged(object sender, System.EventArgs e)
    {
    lblStop.Text=txtEnd.Text;
    }
    }
    }