如何扫描IP范围C#

如何扫描IP范围C#

问题描述:

如何扫描特定范围的IP并将其增加到用户定义的范围..与大多数端口扫描器一样。但如何提高主机位..这增加了网络的位..如何扫描IP范围C#

private static void sendAsyncPingPacket(string hostToPing) 
    { 
     try 
     { 
      int timeout = 5000; 
      AutoResetEvent waiter = new AutoResetEvent(false); 
      Ping pingPacket = new Ping(); 
      //ping completion event reaised 
      pingPacket.PingCompleted += new PingCompletedEventHandler(PingCompletedCallback); 
      string data = "Ping test check"; 
      byte[] byteBuffer = Encoding.ASCII.GetBytes(data); 
      PingOptions pingOptions = new PingOptions(64, true); 
      Console.WriteLine("Time to live: {0}", pingOptions.Ttl); 
      //Console.WriteLine("Don't fragment: {0}", pingOptions.DontFragment); 
      pingPacket.SendAsync(hostToPing, timeout, byteBuffer, pingOptions, waiter); 


      //do something useful 
      waiter.WaitOne(); 
      Console.WriteLine("Ping RoundTrip returned, Do something useful here..."); 
     } 
     catch (PingException pe) 
     { 
      Console.WriteLine("INVALID IP ADDRESS FOUND"); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exceptin " + ex.Message); 
     } 

    } 
    private static void PingCompletedCallback(object sender, PingCompletedEventArgs e) 
    { 
     try 
     { 
      if (e.Cancelled) 
      { 
       Console.WriteLine("Ping canceled."); 

       // Let the main thread resume. 
       // UserToken is the AutoResetEvent object that the main thread 
       // is waiting for. 
       ((AutoResetEvent)e.UserState).Set(); 
      } 

      // If an error occurred, display the exception to the user. 
      if (e.Error != null) 
      { 
       Console.WriteLine("Ping failed>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "); 
       //this will print exception 
       //Console.WriteLine (e.Error.ToString()); 

       // Let the main thread resume. 
       ((AutoResetEvent)e.UserState).Set(); 
      } 

      PingReply reply = e.Reply; 

      DisplayReply(reply); 

      // Let the main thread resume. 
      ((AutoResetEvent)e.UserState).Set(); 
     } 
     catch (PingException pe) 
     { 
      Console.WriteLine("INVALID IP ADDRESS"); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exception " + ex.Message); 
     } 
    } 

    public static void DisplayReply (PingReply reply) 
    { 
     if (reply == null) 
      return; 

     Console.WriteLine ("ping status: {0}", reply.Status); 
     if (reply.Status == IPStatus.Success) 
     { 
      Console.WriteLine ("Address: {0}", reply.Address.ToString()); 
      Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime); 
      Console.WriteLine ("Time to live: {0}", reply.Options.Ttl); 
      //Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment); 
      Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length); 
     } 
    } 

    private static long ToInt(string addr) 
    { 

     return (long)(uint)System.Net.IPAddress.NetworkToHostOrder(
      (int)System.Net.IPAddress.Parse(addr).Address);  
    } 

    private static string ToAddr(long address) 
    { 
     return System.Net.IPAddress.Parse(address.ToString()).ToString(); 
    } 

static int temp = 0; 
    private static void scanLiveHosts(string ipFrom, string ipTo) 
    { 
     long from = Program.ToInt(ipFrom); 
     long to = Program.ToInt(ipTo); 

     long ipLong = Program.ToInt(ipFrom); 
     while (from < to) 
     { 

      string address = Program.ToAddr(ipLong); 
      Program.sendAsyncPingPacket(address); 
      ipLong++; 
     } 

    } 
     static void Main(string[] args) 
    { 
     try 
     { 
      Program.getDeviceList(); 
      Program.sendAsyncPingPacket("192.168.3.72"); 
      Program.scanLiveHosts("192.168.3.1", "192.168.3.41"); 



     } 
     catch (InvalidOperationException ioe) 
     { 
      Console.WriteLine(ioe.Message); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
+0

你能告诉你有这么远的代码? – 2009-10-19 08:05:00

+0

getDeviceList()方法的定义在哪里? – TheSpy 2014-02-24 08:34:50

+0

我现在不记得了,只是从适配器获取设备列表。 – 2014-02-24 09:32:20

主要使用的方法是

private static long ToInt(string addr) 
{ 

    return (long)(uint)System.Net.IPAddress.NetworkToHostOrder(
     (int)System.Net.IPAddress.Parse(addr).Address);  
} 



private static string ToAddr(long address) 
{ 
    return System.Net.IPAddress.Parse(address.ToString()).ToString(); 
} 

上述职位的深度如何发送ping包和扫描网络。

嘿,我发现了由谷歌的代码,我已经做出变化不大适合我的代码和其他的变化,以适应你的代码......也许你应该考虑一下改变:

while (from < to) 
{ 

    string address = Program.ToAddr(ipLong); 
    Program.sendAsyncPingPacket(address); 
    ipLong++; 
} 

喜欢的东西:

while (ipLong < to) 
{ 

    string address = Program.ToAddr(ipLong); 
    Program.sendAsyncPingPacket(address); 
    ipLong++; 
} 

或“追求”为IPS不会在ToAddr(到)停止