如何检查用户是否在同一路由器/调制解调器后面?

时间:2019-06-01 20:36:38

标签: c# model-view-controller dns iot

我的情况很简单。我有一个简单的局域网,其中有几台计算机,其中包括几台通过WiFi连接的计算机。其中之一充当我的Web服务器,并且还连接到外界。其他的是各种系统,唯一的共同点是它们通过我的域名访问我的Web服务器。 (example.com)
现在,我的网站上有一个管理面板,无论用户使用哪种设备,该面板只能供我本地网络中的用户使用。我正在使用Dns.GetHostEntry(IPAddress.Parse(Request.UserHostAddress)).AddressListDns.GetHostAddresses(Request.Url.Host)解决这个问题,然后检查两个地址列表中是否有一个IP地址。
这是检查用户是否在我的本地网络内的最佳方法吗?


要澄清一下:我有一个连接到ISP的电缆调制解调器。我有一个带有WiFi和几个网络端口的路由器。我有一些NodeMCU和Arduino / Internet屏蔽板,我的服务器配置了IIS以绑定到我的域,我的桌面和其他一些设备。我的重点主要放在使用WebAPI调用将数据发送到我的网站的Arduino / NodeMCU板上。但是,外部世界只有读取权限。但是由于我不希望在IoT设备中使用复杂的用户验证内容,因此只要它们都位于同一路由器下就足够了...
每个设备都不会直接调用本地服务器,而是使用域名。这导致到我的ISP的单跳并再次返回,从而为呼叫者和服务器提供一个IP地址。有用。它不是很漂亮,我想知道是否还有更好的选择...


要清除这些问题:我现在使用此代码,它可以正常工作:

public static bool IsAuthorized(this HttpRequestBase request)
{
    if (request.IsLocal) return true;
    if (request?.UserHostAddress == null || request?.Url?.Host == null) { return false; }

    var caller = Dns.GetHostEntry(IPAddress.Parse(request.UserHostAddress)).AddressList.Select(a => a.ToString()).ToList();
    var callee = Dns.GetHostAddresses(request.Url.Host).Select(a => a.ToString()).ToList();
    return (caller.Any(c => callee.Any(e => c.Equals(e))));
}

我不是在寻求解决问题的解决方案。我只想知道是否有一种更简单的方法来获得相同的结果。

0 个答案:

没有答案