C#扫描计算机端口
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace PortScanner
{
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 = 10;
static void Main(string[] args)
{
//接收传入参数一作为要扫描的主机
string host = "192.168.0.1";
//接收传入参数二作为端口扫描范围,如1-4000
string portRange = "1-400";
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, \nopened ports :{2}",
host, (endPort - startPort), openedPorts.Count);
foreach (int port in openedPorts)
Console.WriteLine("\tPort: {0} is open", port.ToString().PadLeft(6));
}
}
//扫描类
class Scanner
{
string m_host;
int m_port;
public Scanner(string host, int port)
{
m_h
相关文档:
RT。先贴代码
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Value_Ref_test1
{
class Program
{
static void Main(string[] args)
{
point a = new point (10,10) ;
point b = a;
......
我们在编程的时分,有时会运用多线程来解决问题,例如你的程序急需在后台老板处置一大堆数据,但还要施用户界面居于可操作状态;或许你的程序亟需访问一些外部资源悉数据库或网络资料等。这些景况你都可以创设一个头线程去处置,然则,多线程不可逆转地会带回一个问题,乃是线程同步的问题。如其这个问题处置糟糕,我们就会 ......
Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。
obj是object的缩写,用于存放 ......
事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道windows消息处理机制的重要,其实C#事件就是基于windows消息处理机制的,只是封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于 ......