日期:2011-05-31  浏览次数:20382 次

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
//增加的如下..
using System.Data;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;

namespace iPortScan
{
 /// <summary>
 /// Summary description for Form1.
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  //该处放的是程序要用到的公共变量
  public string scanHost = Dns.GetHostName(); //默认当前本机IP
  public Int32 tport = 0; //当前连接端口编号
  public Int32 connState = 0; //扫描状态
  public int portSum = 0 ; //端口总计
  public bool endThread = false; //结束状态
  public AutoResetEvent asyncOpsAreDone = new AutoResetEvent(false);
  private System.Windows.Forms.Label label1 = new Label();
  private System.Windows.Forms.TextBox txtHostname;
  private System.Windows.Forms.Button cmdExec;
  private System.Windows.Forms.ListBox logList;
  public System.Windows.Forms.CheckedListBox portList;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.NumericUpDown sNum;
  private System.Windows.Forms.NumericUpDown eNum;
  private System.Windows.Forms.CheckBox showdie;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.ToolTip toolTip1;
  private System.Windows.Forms.StatusBar statusBar1;
  private System.Windows.Forms.LinkLabel linkLabel1;
  private System.Windows.Forms.LinkLabel linkLabel2;
  private System.ComponentModel.IContainer components;
  /*
  此处省略了各个调用的控件的属性设置代码
  */
  static void Main()
  {
   Application.Run(new Form1());
  }

  private void cmdExec_Click(object sender, System.EventArgs e)
  {
   Int32 startPort = (Int32)sNum.Value;
   Int32 endPort = (Int32)eNum.Value;
   if(txtHostname.Text.Length==0)
   {
    MessageBox.Show("请输入一个主机的名称吧!","系统提示");
    txtHostname.Text = scanHost.ToString();
    txtHostname.Focus();
    return;
   }
   if(startPort>endPort)
   {
    MessageBox.Show("错误,起始端口必须要小于结束的端口!","系统提示");
    startPort = endPort-1;
    sNum.Text = startPort.ToString();
    sNum.Focus();
    return ;
   }

   if(cmdExec.Text=="&Scan")
   {
    endThread= false;
    cmdExec.Text= "&Stop";
   }
   else
   {
    endThread= true;
    cmdExec.Text= "&Scan";
   }

   if(endThread!=true)
   {
    connState = 0;
    portSum = 0;
    scanHost = txtHostname.Text;
    try
    {
     IPAddress ipaddr =(IPAddress)Dns.Resolve(scanHost).AddressList.GetValue(0);
     txtHostname.Text = ipaddr.ToS