wjlz

导航

在C#中 端口扫描

using System;
using System.Net;
using System.Net.Sockets;
using System.Collections;
using System.Threading;
class begain
{
 public static void display()
 {
  Console.WriteLine("=========================================");
  Console.WriteLine("... ... scan ports ... ... ");
  Console.WriteLine("=========================================");
 }
}
class scanports
{
 static int[] ports={21,22,23,25,53,79,80,110,111,135,139,445,1080,1433,1521,3306,3389,4889,5631,8080};
 string ip;
 public scanports(string host)
 {
  ip=host;
 }
 public void Start()
 {
  ArrayList waitHandles=new ArrayList();
  for(int i=0;i<ports.Length;i++)
  {
   Scaner sc=new Scaner(this,ports[i]);
   ScanHandler sh=new ScanHandler(sc.scan);
   IAsyncResult iar=sh.BeginInvoke(new AsyncCallback(HandleScanFinish),null);
   waitHandles.Add(iar.AsyncWaitHandle);
  }
  WaitHandle.WaitAll( (WaitHandle[]) waitHandles.ToArray(typeof(WaitHandle)) );
 }

 private void HandleScanFinish(IAsyncResult iar)
 {
  System.Runtime.Remoting.Messaging.AsyncResult ar=(System.Runtime.Remoting.Messaging.AsyncResult)iar;
  ScanHandler sh=(ScanHandler)ar.AsyncDelegate;
  Scaner sc=(Scaner)sh.Target;

  bool res=sh.EndInvoke(iar);

  if(res)
  {
   Console.WriteLine("port "+sc.port+" open");
  }
 }

 private delegate bool ScanHandler();
 private class Scaner
 {
  scanports host;
  internal int port;
  internal Scaner(scanports obj,int p)
  {
   host=obj;
   port=p;
  }
  public bool scan()
  {
   try
   {
    new TcpClient(host.ip,port);
    return true;
   }
   catch
   {
    return false;
   }
  }
 }
}
class mainclass
{
 public static void Main(string[] args)
 {
  begain.display();
  string ip=null;
  if(args.Length!=0)
  {
   ip=args[0];
   Console.WriteLine("Scaning,Please wait……");
   scanports obj_scanports=new scanports(ip);
   obj_scanports.Start();
   System.Threading.Thread.Sleep(100);
  }
  else
  {
   Console.WriteLine("Usage:scanports1.1 ip");
  }
 }
}

posted on 2007-01-08 16:13  大强  阅读(292)  评论(0编辑  收藏  举报