开发者

How to scan an IP Range C#

How to scan a specific range of IP and also increment it to user defined range.. in like most of the port scanners. but how to increase host bits.. it increases network bits..

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");
        }
 开发者_StackOverflow中文版       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);
        }
    }


Main Methods used are

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

above post is in depth how to send ping packet and scan network.


Hey i found the code by google, i've make little changes to fit my code and other changes to fit your code... maybe you should think about change:

while ( from < to)
{

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

to something like:

while ( ipLong < to)
{

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

or the "quest" for ips will not stop at ToAddr(to)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜