Port scanner instance code based on C implementation

  • 2020-06-23 01:46:39
  • OfStack

This article describes port scanner code based on C#. The code includes two parts of code: form and logical processing. In the code, create TcpClient object, use TcpClient to provide client connection for TCP network service, create thread, and create ThreadStart delegate object with port scan range of [0-65536], or customize scan range.

The main function codes are as follows:


using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Net.Sockets; 
using System.Threading; 
namespace PortScanner 
{ 
 public class Form1: 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; 
 // Custom variable 
 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 Form1() 
 { 
  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 = " The host address ";
  // 
  // 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 = " The end port ";
  // 
  // 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 = " The starting port ";
  // 
  // 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 = " scanning ";
  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;
  this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
  this.ClientSize = new System.Drawing.Size(488, 273);
  this.Controls.Add(this.lblNow);
  this.Controls.Add(this.lblStop);
  this.Controls.Add(this.lblStart);
  this.Controls.Add(this.progressBar1);
  this.Controls.Add(this.btnScan);
  this.Controls.Add(this.splitter1);
  this.Controls.Add(this.label3);
  this.Controls.Add(this.label2);
  this.Controls.Add(this.label1);
  this.Controls.Add(this.txtEnd);
  this.Controls.Add(this.txtStart);
  this.Controls.Add(this.txtAddr);
  this.Controls.Add(this.lbResult);
  this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
  this.Name = "Form1";
  this.Text = " Port scanner ";
  this.ResumeLayout(false);
 } 
 [STAThread] 
 static void Main() 
 { 
  Application.Run(new Form1()); 
 } 
 private void btnScan_Click(object sender, System.EventArgs e) 
 { 
  // Create the thread, and create ThreadStart Delegate object 
  Thread process = new Thread(new ThreadStart(PortScan)); 
  process.Start(); 
  // Displays the range of the port scan 
  progressBar1.Minimum = Int32.Parse(txtStart.Text); 
  progressBar1.Maximum = Int32.Parse(txtEnd.Text); 
  // Display box initialization 
  lbResult.Items.Clear(); 
  lbResult.Items.Add(" Port scanner  v1.0."); 
  lbResult.Items.Add(""); 
 } 
 private void PortScan() 
 { 
  start = Int32.Parse(txtStart.Text); 
  end = Int32.Parse(txtEnd.Text); 
  // Check the validity of the input range 
  if ((start >= 0 && start <= 65536) && (end >= 0 && end <= 65536) && (start <= end)) 
  { 
  lbResult.Items.Add(" Start scanning ... ( You may need to wait a few minutes )"); 
  Addr = txtAddr.Text; 
  for (int i = start; i <= end; i++) 
  { 
   port = i; 
   // The scan thread using the port 
   scanThread = new Thread(new ThreadStart(Scan)); 
   scanThread.Start(); 
   // Put threads to sleep 
   System.Threading.Thread.Sleep(100); 
   progressBar1.Value = i; 
   lblNow.Text = i.ToString(); 
  } 
  // Incomplete condition 
  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(" The scan !"); 
  } 
  else 
  { 
  MessageBox.Show(" Input error, port range is [0-65536]"); 
  } 
 } 
 private void Scan() 
 { 
  int portnow = port; 
  // Create thread variables 
  Thread Threadnow = scanThread; 
  done[portnow] = true; 
  // create TcpClient Object, TcpClient Used to TCP Network services provide client connections 
  TcpClient objTCP = null; 
  // Scan the port and write the message if successful 
  try 
  { 
  // with TcpClient Object scan port 
  objTCP = new TcpClient(Addr, portnow); 
  lbResult.Items.Add(" port  " + portnow.ToString() + "  open !"); 
  } 
  catch 
  {
  } 
 } 
 private void txtStart_TextChanged(object sender, System.EventArgs e) 
 { 
  // Gets the starting port value of the input 
  lblStart.Text = txtStart.Text; 
 } 
 private void txtEnd_TextChanged(object sender, System.EventArgs e) 
 { 
  // Gets the value of the received port entered 
  lblStop.Text = txtEnd.Text; 
 } 
 } 
}

Related articles: