从类System.Web.HttpRequest
提供一个对象实例,比如myRequest
,然后使用属性System.Web.HttpRequest.UserHostAddress
我可以检索远程客户端的IP地址:
string myIp = myRequest.UserHostAddress;
(...)
我需要从实例myRequest
专门检索远程客户端的子网掩码的IP地址。
我知道以下是不可能的,但我想完成类似的事情:
string myMaskIp = myRequest.UserHostMaskAddress;
(...)
这是因为我无法像System.Net.NetworkInformation
命名空间那样检查本地设备网络接口,因此我唯一可用的探测对象是从远程客户端向服务器发出的http请求。
非常感谢您的帮助
答案 0 :(得分:2)
我很确定你可以不通过简单地向远程主机发出请求来确定子网掩码 - 即使远程主机就是你。
答案 1 :(得分:1)
Oldyis适用于一般情况,但可以从IPv4地址确定classful subnetmask。没有任何进一步的信息,确定无类子网掩码确实是不可能的。
请记住,有类别的广告计划实际上已不再使用了。
以下是this project的示例:
/// <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的字节数组)