C# 如何确定是向内部网络还是向internet发出http请求?

C# 如何确定是向内部网络还是向internet发出http请求?,c#,http,networking,C#,Http,Networking,我正在尝试编写一个代理服务器,用于记录和调整IIS服务器场上托管站点的流量。托管指南说: 将代理服务器添加或配置到 允许来自web服务器的请求 互联网资源。确保你 记录来自web服务器的请求 仅允许web服务器 代理请求到internet,而不是 内部网络。那么,如果 请求的目的地是 互联网,它应该被允许去 通过代理。但如果申请 正在尝试请求资源或资源 内部网络上的服务器,它 应该加以预防 我使用的是FiddlerCore(驱动Fiddler的库),它允许我在发送请求之前检查请求,并在返回响应头

我正在尝试编写一个代理服务器,用于记录和调整IIS服务器场上托管站点的流量。托管指南说:

将代理服务器添加或配置到 允许来自web服务器的请求 互联网资源。确保你 记录来自web服务器的请求

仅允许web服务器 代理请求到internet,而不是 内部网络。那么,如果 请求的目的地是 互联网,它应该被允许去 通过代理。但如果申请 正在尝试请求资源或资源 内部网络上的服务器,它 应该加以预防

我使用的是FiddlerCore(驱动Fiddler的库),它允许我在发送请求之前检查请求,并在返回响应头之后再次检查请求(此时我拥有主机IP)


我可以做些什么来确定请求是在本地提出还是在互联网上提出?目前我正在将已知的内部IP列入黑名单,但这似乎不对。

将内部IP列入黑名单有什么问题?通常,您只需考虑所有RFC 1918非可路由网络是内部的(100.0.0/8,172.16.0.0/12,192.1680.0/16),并称之为好。如果你真的可以在所有线路上公开路由,那么同样的情况也适用,但是将你的公开路由网络添加到列表中。我遗漏了什么吗?

HTTP RFC指定客户端必须指定。因此,通过检查主机头来确定主机是本地的还是internet的


如果您的客户端违反了该要求(未指定主机),您有权使用400(错误请求)删除/拒绝它们。(如果有不遵循协议的地址,最好进行测试)

一般来说,问题在于决定哪些地址是“内部”的,哪些是外部的。RFC1918是一种可以实现这一点的机制,但IE使用了不同的策略;有关IE如何实现的更多信息,请参阅