从 .NET HttpRequest 类检索子网掩码地址
本文关键字:子网掩码 地址 检索 NET HttpRequest | 更新日期: 2023-09-27 18:30:59
从类System.Web.HttpRequest
给出一个对象实例,比如myRequest
,然后使用属性System.Web.HttpRequest.UserHostAddress
我可以检索远程客户端的 IP 地址:
string myIp = myRequest.UserHostAddress;
(...)
我需要的是仅从实例myRequest
检索远程客户端子网掩码的 IP 地址。
我知道以下内容是不可能的,但我想完成类似的事情:
string myMaskIp = myRequest.UserHostMaskAddress;
(...)
这是因为我无法像使用命名空间那样检查本地设备网络接口System.Net.NetworkInformation
因此我唯一可用的探测对象是从远程客户端到服务器的 http 请求。
非常感谢您的帮助
我很确定您无法通过简单地向远程主机发出请求来确定子网掩码 - 即使远程主机是您。
Oldyis 适用于一般情况,但是可以从 IPv4 地址确定有类子网掩码。没有任何进一步的信息,确定无类别子网掩码确实是不可能的。
请记住,分类地址方案实际上不再使用。
以下是该项目的示例:
/// <summary>
/// Returns the classfull subnet mask of a given IPv4 network
/// </summary>
/// <param name="ipa">The network to get the classfull subnetmask for</param>
/// <returns>The classfull subnet mask of a given IPv4 network</returns>
public static Subnetmask GetClassfullSubnetMask(IPAddress ipa)
{
if (ipa.AddressFamily != AddressFamily.InterNetwork)
{
throw new ArgumentException("Only IPv4 addresses are supported for classfull address calculations.");
}
IPv4AddressClass ipv4Class = GetClass(ipa);
Subnetmask sm = new Subnetmask();
if (ipv4Class == IPv4AddressClass.A)
{
sm.MaskBytes[0] = 255;
}
if (ipv4Class == IPv4AddressClass.B)
{
sm.MaskBytes[0] = 255;
sm.MaskBytes[1] = 255;
}
if (ipv4Class == IPv4AddressClass.C)
{
sm.MaskBytes[0] = 255;
sm.MaskBytes[1] = 255;
sm.MaskBytes[2] = 255;
}
return sm;
}
(将 SubnetMask 类视为长度为 4 的字节数组)