//===========================================================
// C# 实现端口扫描
//===========================================================
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace ConApp
{
class Program
{
//已扫描端口数目
internal static int scannedCount =
0;
internal static int runningThreadCount =
0;
internal static List<
int> openedPorts =
new List<
int>
();
static int startPort =
1;
static int endPort =
500;
static int maxThread =
100;
static void Main(
string[] args)
{
//简单提示
Console.WriteLine(
"");
Console.WriteLine("// Writer;Feeling");
Console.WriteLine("");
Console.WriteLine("请输入要扫描的主机;");
string host =
Console.ReadLine();
Console.WriteLine("请输入扫描的端口 例如:1-800");
string portRange =
Console.ReadLine();
startPort =
int.Parse(portRange.Split(
'-')[
0].Trim());
endPort =
int.Parse(portRange.Split(
'-')[
1].Trim());
for (
int port = startPort; port < endPort; port++
)
{
Scanner scanner =
new Scanner(host, port);
Thread thread =
new Thread(
new ThreadStart(scanner.Scan));
thread.Name =
port.ToString();
thread.IsBackground =
true;
thread.Start();
runningThreadCount++
;
Thread.Sleep(10);
//循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术
while (runningThreadCount >=
maxThread) ;
}
//空循环,直到所有端口扫描完毕
while (scannedCount +
1 < (endPort -
startPort)) ;
Console.WriteLine();
Console.WriteLine();
//输出结果
Console.WriteLine(
"Scan for host:{0} has been completed, \n total {1} ports scanned, \n opened ports:{2}", host, (endPort -
startPort), openedPorts.Count);
foreach (
int port
in openedPorts)
{
Console.WriteLine("\tport: {0} is open", port.ToString().PadLeft(
6));
}
Console.ReadLine();
}
}
class Scanner
{
string m_host;
int m_port;
public Scanner(
string host,
int port)
{
m_host =
host;
m_port =
port;
}
public void Scan()
{
TcpClient tc =
new TcpClient();
tc.SendTimeout = tc.ReceiveTimeout =
2000;
try
{
tc.Connect(m_host, m_port);
if (tc.Connected)
{
Console.WriteLine("Port {0} is Open", m_port.ToString().PadRight(
6));
Program.openedPorts.Add(m_port);
}
}
catch
{
Console.WriteLine("Port {0} is Closed", m_port.ToString().PadRight(
6));
}
finally
{
tc.Close();
tc =
null;
Program.scannedCount++
;
Program.runningThreadCount--
;
}
}
}
}
转载于:https://www.cnblogs.com/wugang/archive/2012/10/26/2740885.html
相关资源:网络综合实验——端口扫描并连接服务器