如何在IIS日志中获取最终用户计算机名称

时间:2012-12-03 15:51:32

标签: c# iis logging dns

IIS 7.0及更高版本。此设置中没有负载均衡器。请求的文件是一个小的spacer图像,可以使用JQuery同步或异步加载。该文件并不重要,它只是让最终用户点击此IIS服务器进行分析的一种方法。

我需要从IIS日志中捕获访问者的计算机名称。当前日志中已有客户端IP地址。问题是IP在我们的环境中是短暂的,如果我不能很快将其解析为机器名,那么它就没用了。因此,我们需要实时确定访问IP的机器名称。

有什么好方法可以解决这个问题。这些是我找到的选项......

1)在IIS中启用反向DNS查找 - > http://www.expta.com/2010/01/how-to-enable-reverse-dns-lookup-in-iis.html。这会影响服务器性能,我担心这会因为反向查找操作的费用增加而最终持有用户请求并导致其页面加载缓慢

2)编写一个IIS日志模块,通过重新查找IP并在日志中编写计算机名称来增强日志记录。 >>我担心这会减慢最终用户的请求周转时间,并且由于反向DNS查找而影响服务器性能。我猜这是我在上面的第1点,而不是依靠微软的内置功能。最后,实时反向DNS查找将影响性能。

3)与上面的第1点或第2点相同,但我将更改用户使用Async javascript调用(而不是内联调用)加载IIS托管图像文件的页面的HTML。那样结束suer不必等待这个IIS请求完成并且可以在不依赖于间隔图像请求的情况下加载页面(对它们重要的内容)加载。但是,浏览器仍然会为异步图像加载专用一个线程,但它仍然是最终用户的性能损失。

4)只需使用默认的IIS日志即可实时登录。让一个单独的C#应用​​程序每5分钟左右读取一次该文件,检测添加的新行,解析它们并获取IP,进行反向查找并查找机器名称并根据请求将其记录到数据库或平面文件中。翻转方面是现在我需要实时登录,因为如果我不立即记录,那么当我的应用程序读取日志,查找并执行反向查找时,IP可能已分配给不同的计算机在上面。另外,我必须处理读取日志文件的复杂性,以便在上一次读取之后只读取新插入的日志条目等。

5)http://www.iis.net/learn/extensions/advanced-logging-module/advanced-logging-for-iis-real-time-logging - >我想这与上面的第2点相同,除了它是用VC ++而不是C#编写的。所以我猜这个方法也存在同样的缺点

所以每个方法似乎都有缺点。您认为解决问题的好方法是什么?

1 个答案:

答案 0 :(得分:0)

由于路由的工作方式,无法将IP转换为计算机名称 - 许多计算机可以通过相同的IP进行。

如果您找到了将IP映射到您可以接受的机器名称的方法,一种方法可能是简单地让站点为映像提供服务并在正常请求处理程序中执行所有必要的发现。这样您还可以获得有关用户的更多信息(cookie,hauthentication头文件......)。这种方法可能比配置IIS日志记录更灵活。