【发布时间】:2015-01-06 00:40:19
【问题描述】:
有一个类似的问题 (Can I temporarily override DNS resolution within a .NET application?),但我无法通过那里的微薄回应来解决这个问题。
背景资料
我在我的家庭网络中设置了一台服务器,一台旧电脑。我们的路由器转发了正确的端口,服务器运行用于 http、svn、游戏等的服务器软件。我注册了一个始终指向我们的外部 IP 地址的域名。出于所有意图和目的,我已经设置了一个典型的网络服务器。我的朋友可以通过域名连接在我的服务器上游戏,我可以推拉svn项目等。
唯一的问题是当我连接到我的家庭网络(与服务器相同的网络)时,我还需要使用我的服务器。使用域名会导致 Windows 将其解析为我们自己的 IP 地址,而我的路由器太迟钝了,无法意识到它只需要像往常一样将它转发回我们的网络到服务器。我已经进行了一些环顾、配置、远程登录和 DNS 覆盖,但我有充分的权威表明,我们的 ISP 显然削弱了他们路由器的 DNS 覆盖功能,以防止出现这种情况。显然他们不喜欢内部环回。
我现在基本上必须为我的每个服务器服务保留 2 个配置:一个配置指定我在国外时的域名,第二个配置指定我在家时的服务器内部 IP。这令人沮丧,因为它并不总是可能的。
我想实例化一个全局 DNS 解析请求/响应侦听器,它将执行以下操作:如果请求的域名与给定字符串匹配,则使用我的选择覆盖响应中的 IP。
我查过easyhook、dllimport、msdn pages等,但我仍然不知道从哪里开始,我需要访问哪些类等等。对于这个特定问题,我基本上没有预先存在的代码。
我有 Visual Studio,多年相对简单的编程经验,对不熟悉的代码和其他一切都有很好的理解,只是不知道如何开始或寻找什么。
非常感谢任何能让我前进的东西。
【问题讨论】:
-
如果您可以使用现有工具 - Fiddler 可能会这样做(让您的客户端机器重写服务器的 IP)。
-
不要尝试编写应用层 DNS Trickery,它只是不适合这样做的层,您将始终与内置的 TCP 堆栈支持作斗争。
-
您可以使用
\Windows\System32\drivers\etc文件夹中的hosts文件来覆盖DNS查找 -
Slava:不,这使它只在我在家而不是在国外时才有效。我对每次更改位置时都更新主机文件不感兴趣。
-
约翰:不确定你的意思? TCP 数据包有一个标头来替换单独的 DNS 请求什么的?
标签: c# .net windows dns intercept