// C# 实现端口扫描
//===========================================================
using System
using System.Collections.Generic
using System.Text
using System.Net
using System.Net.Sockets
using System.Threading
namespace ConsoleApplication3
{
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("// WriterFeeling")
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 = startPortport <endPortport++)
{
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--
}
}
}
}
你知道服务器的名字吗?如果知道名字,可以直接“开始”-->“运行”-->输入“CMD”回车,在小窗口里Ping 服务器名,就可以自动解析出服务器的IP地址。如果不知道的话,可以在网上下载一个全网扫描软件,推荐IP Scanner和IP Network Browser,就能把你所在的局域网的所有服务器和PC都找出来,包括主机名、IP地址、MAC地址,甚至设备型号。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)