IPv6 IP地址的字节数组大小

本文关键字:数组 字节数 字节 IP 地址 IPv6 | 更新日期: 2023-09-27 18:01:36

我正在编写一个应用程序,它将存储请求来自何处的IP地址。这些IP地址将作为varbinary(16)存储在我的数据库中。很明显,varbinary(16)的大小不合适。目前,我使用以下代码将请求的IP地址转换为字节[];

HttpRequestMessage request = GetRequestMessage();
string ipAddress = string.Empty;
if (request.Properties.ContainsKey("MS_HttpContext"))
{
  ipAddress = ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
}
else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
  RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
  ipAddress = property.Address;
}
byte[] bytes = new byte[ipAddress.Length * sizeof(char)];
System.Buffer.BlockCopy(ipAddress.ToCharArray(), 0, bytes, 0, bytes.Length);
// What is the maximum size of bytes?

我注意到字节的长度是26。我的问题是,如果我需要支持IPv6地址,字节的最大大小是多少?我需要知道改变我的varbinary(16)的大小到适当的长度。

谢谢!

IPv6 IP地址的字节数组大小

byte[] bytes = new byte[ipAddress.Length * sizeof(char)];

这看起来像一个C程序员写的东西,你不需要做这些。

你所需要的是ipAddress.GetAddressBytes(),并把它塞进binary(16)

作为旁注,您也可以使用uniqueidentifier来存储IPv6地址,因为它们的长度相同。它们比varbinary

搜索起来要快得多

IPv6地址空间为128位。因此,任何IPv6地址都可以用16字节表示。因此,varbinary(16)是正确的。

然而,你提取字节的方式是奇数。

请参阅IPAddress.GetAddressBytes()的文档

(看起来您可能还需要IPAddress.Parse())