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;
}
}
}