易截截图软件、单文件、免安装、纯绿色、仅160KB

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


相关文档:

c# 支持XML序列化的泛型 Dictionary

/// <summary>
/// 支持XML序列化的泛型 Dictionary
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
[XmlRoot("SerializableDictionary")]
public class SerializableDictionary<TKey, TValue& ......

C#中一些字符串操作的常用用法,c#编码和解码

//获得汉字的区位码
  byte[] array = new byte[2];
  array = System.Text.Encoding.Default.GetBytes("啊");
int i1 = (short)(array[0] - ''\0'');
  int i2 = (short)(array[1] - ''\0'');
//unicode解码方式下的汉字码
  array = System.Text.Encoding.Unicode.GetBytes("啊");
  i1 = (short)(arra ......

浅谈C#泛型的用处

为什么要使用C#泛型?
为了了解这个问题,我们先看下面的代码,代码省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型:
public class Stack
    {
        private int[] m_item;
        public ......

C#事件(event)解析

      事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道windows消息处理机制的重要,其实C#事件就是基于windows消息处理机制的,只是封装的更好,让开发者无须知道底层的消息处理机制,就可以开发出强大的基于 ......

c#线程

c#中写一个多线程应用是非常简单的,本章将介绍如何在c#种开发多线程程序。在.net中线程是由System.Threading 名字空间所定义的。所以你必须包含这个名字空间。
using System.Threading;
开始一个线程
System.Threading 名字空间的线程类描述了一个线程对象,通过使用类对象,你可以创建、删除、停止及恢复一个线程。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号