none
如何获取IPV6的地址 RRS feed

  • 问题

  • System.Net.Dns.GetHostEntry(strHostName).AddressList[0].ToString();
    得到的是:fe80::c960:55bf:bb18:611c%10
    请问怎么样才能IPV6的址?
    我这样做好像是不对的
    2009年10月15日 2:46

答案


  • 我给你写的程序,试试~



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;

    namespace ConvertTest
    {
        class Program
        {
            static void Main(string[] args)
            {
              string str="fe80::c960:55bf:bb18:611c";

             string[] str1 = Regex.Split(str, @"[:]+");

                if (str1.Length == 8)
                {
                    for (var i = 0; i < str1.Length; i++)
                    {
                        Console.Write(Convert.ToString(Convert.ToUInt32(str1[i], 16), 2));

                        if (i != str1.Length - 1)
                        {
                            Console.Write(":");
                        }
                    }
                }

                else
                {
                    //不采用压缩零的形式输出
                    for (var j = 0; j < str1.Length; j++)
                    {                  
                        str = str.Replace(str1[j], Convert.ToString(Convert.ToUInt32(str1[j], 16), 2));
                    }
                   Console.WriteLine(str);
                    
                   
                    /*不采用压缩零的形式输出
                     * int m = 8 - str1.Length;//计算压缩零的个数
                     * string tmp1 = "";//存储压缩零字符串
                     * for (var k = 0; k < m; k++)
                     * {
                     *     tmp1 += "0:";
                     * }
                     * for (var j = 0; j < str1.Length; j++)
                     * {                     
                            str = str.Replace(str1[j], Convert.ToString(Convert.ToUInt32(str1[j], 16), 2));
                     * }
                     * str=str.replace("::",":"+tmp1);
                     * Console.WriteLine(str);
                    */              
                }
                Console.ReadKey();
            }
        }
    }


    不入流的程序员,简单的疯子,只为成为绝世的狂人!
    • 已标记为答案 male110 2009年10月16日 3:28
    2009年10月16日 3:20

全部回复

  • fe80::c960:55bf:bb18:611c

    应该就是你要获取的IPV6地址吧,至于你的10%。。不得而知

    2009年10月15日 4:34
  • 能不能把它转换成
    0.0.0.0.0.0.0.0
    像IP4这样的格式,这个不是八位吗?
    2009年10月15日 5:40
  • 一个是二进制的形式。一个是十六进制的形式,做个转化~

    (我还是对楼主给出的IPV6地址 感到奇怪 难道是个路由地址? )


    不入流的程序员,简单的疯子,只为成为绝世的狂人!
    2009年10月15日 8:53
  • 这个我也不清楚,是一个运在服务器上的程序,他说我IP地址获取的有问题,发我的就是这个字符串,具体获取得到的是什么,我也不清楚。
    请问Jason_2, 具体要怎么样转化呢?
    2009年10月15日 10:08
  • 如果没有后面的10%  fe80::c960:55bf:bb18:611c  这个ipv6的地址是正确的,我少看了个冒号,中间采用压缩0的形式,完整的ipv6地址应该是fe80:0:0:0:c960:55bf:bb18:611c,至于十六进制 转 二进制,可以将十六进制 先转为 十进制,再讲十进制 转化为 二进制
    Convert.ToStrig(Convert.ToInt32("fe80",16),2)  (fe80 为十六进制数)

    但是如果针对IPv6的地址转化可能会比较麻烦,一个是冒号的问题,另一个就是压缩零的问题


    不入流的程序员,简单的疯子,只为成为绝世的狂人!
    2009年10月16日 0:58
  • 看起来好像很麻烦
    2009年10月16日 1:19

  • 我给你写的程序,试试~



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;

    namespace ConvertTest
    {
        class Program
        {
            static void Main(string[] args)
            {
              string str="fe80::c960:55bf:bb18:611c";

             string[] str1 = Regex.Split(str, @"[:]+");

                if (str1.Length == 8)
                {
                    for (var i = 0; i < str1.Length; i++)
                    {
                        Console.Write(Convert.ToString(Convert.ToUInt32(str1[i], 16), 2));

                        if (i != str1.Length - 1)
                        {
                            Console.Write(":");
                        }
                    }
                }

                else
                {
                    //不采用压缩零的形式输出
                    for (var j = 0; j < str1.Length; j++)
                    {                  
                        str = str.Replace(str1[j], Convert.ToString(Convert.ToUInt32(str1[j], 16), 2));
                    }
                   Console.WriteLine(str);
                    
                   
                    /*不采用压缩零的形式输出
                     * int m = 8 - str1.Length;//计算压缩零的个数
                     * string tmp1 = "";//存储压缩零字符串
                     * for (var k = 0; k < m; k++)
                     * {
                     *     tmp1 += "0:";
                     * }
                     * for (var j = 0; j < str1.Length; j++)
                     * {                     
                            str = str.Replace(str1[j], Convert.ToString(Convert.ToUInt32(str1[j], 16), 2));
                     * }
                     * str=str.replace("::",":"+tmp1);
                     * Console.WriteLine(str);
                    */              
                }
                Console.ReadKey();
            }
        }
    }


    不入流的程序员,简单的疯子,只为成为绝世的狂人!
    • 已标记为答案 male110 2009年10月16日 3:28
    2009年10月16日 3:20
  • 再问一下,如何判断一个IP是IPV6还是IPV4呢?
    2009年10月16日 3:46