从c#中IPv6安全的IP字符串中移除端口

本文关键字:字符串 IPv6 安全 IP | 更新日期: 2023-09-27 18:03:57

我需要在ASP上运行的rest API中请求的用户上没有端口的IP。净MVC。似乎获取地址的方法是以下方法的组合:

HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
HttpContext.Current.Request.UserHostAddress;

给我一个字符串IP:Port

IPV4很简单,但从阅读我期望IPV6会给我这样的东西:

[1fff:0:a88:85a3::ac1f]:8001

IPAddress。解析可以处理带端口的IPv6,但不能处理带端口的IPv4,因为端口很奇怪。

我可以检查字符串,看看它是什么类型的地址,但我觉得应该有更好的方法。

任何想法?

从c#中IPv6安全的IP字符串中移除端口

这是我的临时版本

public string StripPortFromEndPoint(string endPoint)
{
    var splitList = endPoint.Split(':');
    if (splitList.Length > 2)
    {
        endPoint = IPAddress.Parse(endPoint).ToString();
    }
    else if (splitList.Length == 2)
    {
        endPoint = splitList[0];
    }
    else
    {
        throw new ParseException("No port separator found",0);
    }
    return endPoint;
}