Csharp语言下面的IPv4与IPv6
写在前面:在Csharp下面有IPAddress类,使用这个类可以很容易地获取所有的IP信息与相关的协议信息,判断IPv4与IPv6也不成问题。使用AddressFamily就判断出来了,是用来获取协议的体系的。不过一个计算机的IP可以有很多个,这也是一个头痛的事情。
View Code
说明
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的相关信息都可以从这里取得。
View Code
// 下面的程序展示了如何使用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();
}
}
}


浙公网安备 33010602011771号