我正在尝试编写代理服务器,用于记录和整理IIS场中托管的站点的流量。托管指南说:
添加或配置您的代理服务器 允许来自Web服务器的请求 互联网资源。一定要你 来自Web服务器的日志请求。 ·
仅允许Web服务器进行 代理请求上网,而不是 内部网络。所以,如果 请求的目的地是 互联网,它应该被允许去 通过代理。但如果申请 正在尝试请求资源或 它在内部网络上的服务器 应该被阻止。
我正在使用FiddlerCore(驱动Fiddler的库),它允许我在发送请求之前检查请求,并在返回响应头后再次检查请求(此时我有主机IP)。
我可以做些什么来确定是在本地还是在互联网上发出请求?目前我将已知的内部IP列入黑名单,但这似乎不对。
答案 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。