C# 欺骗主机名
C# Spoof Host Name
背景资料
我将用户存储在 table 中,我将 "companies" 的概念存储在单独的 table 中,然后我有一个链接的中间 table一个(用户)对许多(公司)关系中的用户到公司。我遇到的情况是用户将从公司特定的域注册或登录。要求是我需要根据用户来自的域授权用户。
我在想什么
我相信您可以从 Request.Url 获取域名,所以我认为我只获取名称并执行我的授权逻辑。我 运行 遇到的问题是,如果我尝试通过以下方式获取名称:
var hostName = Request.Url.DnsSafeHost
总是returnslocalhost
。所以为了绕过这个,我虽然可以编辑我的主机文件以包含这一行:
localhost:12345 [domain I want to spoof].com
但即使这样仍然 returns localhost
所以我不确定我是否正确地处理了这个问题。
更新
根据评论请求,我使用的操作系统是 Windows 10.
从本地测试开始,您需要将主机文件中的行更改为如下内容:
127.0.0.1 foodbar.org
。根据文件本身,行应为 <ip> <hostname>
.
然后,您必须在测试时导航到 http://foodbar.org。我过去曾这样做过以测试 TLS 证书,这对我有用。您可能必须更改 IIS 中的绑定。
这需要大量搜索,但我最终能够解决我的问题。对于以后的搜索,这里有一些我应该使用但事先没有足够的知识知道它们是什么的关键字:IIS Express 本地主机别名。
首先要记住的是,我所做的一切,我必须作为管理员。
首先,根据 ,我必须正确格式化我的 HOSTS 文件。在我的例子中,我想使用的别名是 dev.myproject
这意味着我将以下行添加到我的 HOSTS 文件中:
127.0.0.1 dev.myproject
我通过打开一个终端(我个人使用 Git Bash)验证了它是否有效,并提交了一个 ping 请求,该请求的响应如下:
$ ping dev.myproject
Pinging dev.myproject [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
下一步是配置 IIS Express 别名。为此,我转到我的 IIS Express 配置文件,该文件位于:[solution directory]\.vs\config\applicationhost.config
(请记住 .vs 是一个隐藏文件夹)并编辑该文件以包含一个新的网站绑定。新绑定如下所示:
<site name="myproject" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="[directory name removed]" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:52841:localhost" />
<binding protocol="http" bindingInformation="*:52841:dev.myproject" />
</bindings>
</site>
设置网站绑定后,我通过转到项目属性修改了项目的服务器属性(在解决方案资源管理器中,右键单击项目名称,单击最底部的属性,然后转到Web 选项卡)。项目 URL 我保持原样,但我检查了 Override Application URL 作为我想使用的别名,在这种情况下它看起来喜欢:
http://dev.myproject:52841
最后一步是为非管理员用户保留别名 URL(因为我一般不会 运行 作为管理员)。在这种情况下,我 运行 从我的终端执行以下命令:
netsh http add urlacl url=http://*:52841/ user=\Everyone
在 IIS Express 中设置别名后,我可以通过启动应用程序 (F5) 访问别名 URL。这最初带来了 http://localhost:52841
但在一个单独的选项卡中我导航到 http://dev.myproject:52841
并且它起作用了。
现在一切都完成了,我需要得到的实际 属性 如下:
var host = Request.Url?.Host;
背景资料
我将用户存储在 table 中,我将 "companies" 的概念存储在单独的 table 中,然后我有一个链接的中间 table一个(用户)对许多(公司)关系中的用户到公司。我遇到的情况是用户将从公司特定的域注册或登录。要求是我需要根据用户来自的域授权用户。
我在想什么
我相信您可以从 Request.Url 获取域名,所以我认为我只获取名称并执行我的授权逻辑。我 运行 遇到的问题是,如果我尝试通过以下方式获取名称:
var hostName = Request.Url.DnsSafeHost
总是returnslocalhost
。所以为了绕过这个,我虽然可以编辑我的主机文件以包含这一行:
localhost:12345 [domain I want to spoof].com
但即使这样仍然 returns localhost
所以我不确定我是否正确地处理了这个问题。
更新
根据评论请求,我使用的操作系统是 Windows 10.
从本地测试开始,您需要将主机文件中的行更改为如下内容:
127.0.0.1 foodbar.org
。根据文件本身,行应为 <ip> <hostname>
.
然后,您必须在测试时导航到 http://foodbar.org。我过去曾这样做过以测试 TLS 证书,这对我有用。您可能必须更改 IIS 中的绑定。
这需要大量搜索,但我最终能够解决我的问题。对于以后的搜索,这里有一些我应该使用但事先没有足够的知识知道它们是什么的关键字:IIS Express 本地主机别名。
首先要记住的是,我所做的一切,我必须作为管理员。
首先,根据 dev.myproject
这意味着我将以下行添加到我的 HOSTS 文件中:
127.0.0.1 dev.myproject
我通过打开一个终端(我个人使用 Git Bash)验证了它是否有效,并提交了一个 ping 请求,该请求的响应如下:
$ ping dev.myproject
Pinging dev.myproject [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
下一步是配置 IIS Express 别名。为此,我转到我的 IIS Express 配置文件,该文件位于:[solution directory]\.vs\config\applicationhost.config
(请记住 .vs 是一个隐藏文件夹)并编辑该文件以包含一个新的网站绑定。新绑定如下所示:
<site name="myproject" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="[directory name removed]" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:52841:localhost" />
<binding protocol="http" bindingInformation="*:52841:dev.myproject" />
</bindings>
</site>
设置网站绑定后,我通过转到项目属性修改了项目的服务器属性(在解决方案资源管理器中,右键单击项目名称,单击最底部的属性,然后转到Web 选项卡)。项目 URL 我保持原样,但我检查了 Override Application URL 作为我想使用的别名,在这种情况下它看起来喜欢:
http://dev.myproject:52841
最后一步是为非管理员用户保留别名 URL(因为我一般不会 运行 作为管理员)。在这种情况下,我 运行 从我的终端执行以下命令:
netsh http add urlacl url=http://*:52841/ user=\Everyone
在 IIS Express 中设置别名后,我可以通过启动应用程序 (F5) 访问别名 URL。这最初带来了 http://localhost:52841
但在一个单独的选项卡中我导航到 http://dev.myproject:52841
并且它起作用了。
现在一切都完成了,我需要得到的实际 属性 如下:
var host = Request.Url?.Host;