2009-10-19 7 views
0

Как сканировать определенный диапазон 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

Можете ли вы показать код, который вы имеете до сих пор? –

+0

Где определение метода getDeviceList()? – TheSpy

+0

Теперь я не помню, просто получил список устройств из адаптера. –

ответ

1

Основные методы, используемые в

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(); 
} 

выше пост в глубину, как отправить пинг-пакет и сеть сканирования.

1

Эй я нашел код на Google, я сделать небольшие изменения, чтобы соответствовать своему коду и другим изменения, чтобы соответствовать вашему коду ... может быть, вы должны думать об изменении:

while (from < to) 
{ 

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

к чему-то вроде:

while (ipLong < to) 
{ 

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

или «квест» для изобр не остановится на ToAddr (к)