你的位置是:网站首页--- 技术文章---计算机技术

Csharp语言下面的IPv4与IPv6


【 字体:


写在前面:在Csharp下面有IPAddress类,使用这个类可以很容易地获取所有的IP信息与相关的协议信息,判断IPv4与IPv6也不成问题。使用AddressFamily就判断出来了,是用来获取协议的体系的。不过一个计算机的IP可以有很多个,这也是一个头痛的事情。

说明
IPv4跟IPv6的地址最大差别就是长度,IPv4地址为2的32次方一个地址,而IPv6则是2的128次方一个地址,常见的IPv4地址是192.168.10.1这样的形式,而IPv6则是21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A这种形式。

使用MSDN的例子就可以很充分地理解IPAddress类了,当然IPv4,IPv6的相关信息都可以从这里取得。

// 下面的程序展示了如何使用IPAddress类获取服务器和相关信息

using System;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;

namespace Mssc.Services.ConnectionManagement
{

    class TestIPAddress
    {

        /**
          * IPAddresses方法展示了获取服务器IP地址信息
          * 还显示了当前服务器支持的地址的协议
          * 和IP地址标准的byte格式
          **/
        private static void IPAddresses(string server)
        {
            try
            {
                System.Text.ASCIIEncoding ASCII = new System.Text.ASCIIEncoding();

                // 获取服务器信息
                IPHostEntry heserver = Dns.GetHostEntry(server);

                // 循序显示服务器的信息
                foreach (IPAddress curAdd in heserver.AddressList)
                {


                    // 显示当前的IPAddress类所使用的协议
                    // 例如:如果支持IPv6就会显示InternNetworkV6
                    // 如果同时支持IPv4就会有另外的InterNetwork值.
                    Console.WriteLine("AddressFamily: " + curAdd.AddressFamily.ToString());

                    // 如果是IPv6,就显示IP地址标识符
                    if (curAdd.AddressFamily.ToString() == ProtocolFamily.InterNetworkV6.ToString())
                        Console.WriteLine("Scope Id: " + curAdd.ScopeId.ToString());


                    // 显示IP地址的标准格式
                    // 在IPv4中是一个以点分隔的格式
                    // 在IPv6是一个以冒号分隔的格式
                    Console.WriteLine("Address: " + curAdd.ToString());

                    // 显示IP地址字节信息
                    Console.Write("AddressBytes: ");

 

                    Byte[] bytes = curAdd.GetAddressBytes();
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        Console.Write(bytes[i]);
                    }

                    Console.WriteLine("\r\n");

                }

            }
            catch (Exception e)
            {
                Console.WriteLine("[DoResolve] Exception: " + e.ToString());
            }
        }

        // IPAddressAdditionalInfo方法显示服务器地址的其它信息
        private static void IPAddressAdditionalInfo()
        {
            try
            {
                // 显示当前的服务器是否显示IPv4和IPv6               
                Console.WriteLine("\r\nSupportsIPv4: " + Socket.SupportsIPv4);
                Console.WriteLine("SupportsIPv6: " + Socket.SupportsIPv6);

                if (Socket.SupportsIPv6)
                {
                    // 指示 Socket 必须侦听所有网络接口上的客户端活动
                    Console.WriteLine("\r\nIPv6Any: " + IPAddress.IPv6Any.ToString());

                    // 提供 IP 环回地址。
                    Console.WriteLine("IPv6Loopback: " + IPAddress.IPv6Loopback.ToString());

                    // 提供指示不应使用任何网络接口的 IP 地址。
                    Console.WriteLine("IPv6None: " + IPAddress.IPv6None.ToString());

                    Console.WriteLine("IsLoopback(IPv6Loopback): " + IPAddress.IsLoopback(IPAddress.IPv6Loopback));
                }
                Console.WriteLine("IsLoopback(Loopback): " + IPAddress.IsLoopback(IPAddress.Loopback));
            }
            catch (Exception e)
            {
                Console.WriteLine("[IPAddresses] Exception: " + e.ToString());
            }
        }


        public static void Main(string[] args)
        {
            string server = null;

            // IP地址正则表达式
            Regex rex = new Regex(@"^[a-zA-Z]\w{1,39}$");

            if (args.Length < 1)
            {
                // 获取服务器地址
                server = Dns.GetHostName();
                Console.WriteLine("Using current host: " + server);
            }
            else
            {
                server = args[0];
                if (!(rex.Match(server)).Success)
                {
                    Console.WriteLine("Input string format not allowed.");
                    return;
                }
            }

            // 显示一系列的服务器信息
            IPAddresses(server);

            // 显示服务器的其它信息
            IPAddressAdditionalInfo();
        }

    }
}


出处:小作坊网Chakman

Copyright © 2006-2008 小作坊网 All rights reserved.
备案号:粤ICP备09058104号          电子信箱: jingle_guan#163.com