2009-10-19 8 views
0

Comment numériser une plage IP spécifique et l'incrémenter dans la plage définie par l'utilisateur ... comme la plupart des scanners de ports. mais comment augmenter bits d'hôte .. il augmente les bits de réseau ..Comment numériser une plage 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

Pouvez-vous montrer le code que vous avez à ce jour? –

+0

Où est la définition de la méthode getDeviceList() ?? – TheSpy

+0

Je ne me souviens pas maintenant, juste obtenir la liste des périphériques de l'adaptateur. –

Répondre

1

principales méthodes utilisées sont

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

ci-dessus après est en profondeur comment envoyer paquet de ping et de numérisation réseau.

1

Hey j'ai trouvé le code par google, j'ai apporter de petits changements pour adapter mon code et d'autres modifications pour adapter votre code ... peut-être vous devriez penser à changer:

while (from < to) 
{ 

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

à quelque chose comme:

while (ipLong < to) 
{ 

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

ou la « quête » pour ips ne se limitera pas toaddr (à)

Questions connexes