如何确定是否正在向内部网络或互联网发出http请求?

时间:2011-03-20 02:16:47

标签: c# http networking

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

  

添加或配置您的代理服务器   允许来自Web服务器的请求   互联网资源。一定要你   来自Web服务器的日志请求。 ·

     

仅允许Web服务器进行   代理请求上网,而不是   内部网络。所以,如果   请求的目的地是   互联网,它应该被允许去   通过代理。但如果申请   正在尝试请求资源或   它在内部网络上的服务器   应该被阻止。

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

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

3 个答案:

答案 0 :(得分:0)

将内部IP列入黑名单有什么问题?通常,您只需将所有RFC 1918不可路由的网络视为内部网络(10.0.0.0/8,172.16.0.0/12,192.168.0.0/16)并将其称为良好。如果您实际上可以全面公开路由,那么同样适用,但将您的可公共路由网络添加到列表中。我错过了什么吗?

答案 1 :(得分:0)

HTTP RFC指定客户端必须指定host header。因此,通过检查主机头来确定主机是本地还是互联网。

如果您有违反该规定的客户(未指定主机),您有权使用400(错误请求)删除/拒绝它们。 (如果有不遵循协议的话,更好的测试)

答案 2 :(得分:0)

问题通常在于决定哪些地址是“内部的”,哪些是外部的。 RFC1918是一种可以做到这一点的机制,但IE使用不同的策略;有关IE如何做的更多信息,请参阅http://msdn.microsoft.com/en-us/library/bb250483(v=vs.85).aspx