监控网页访问

时间:2012-02-29 21:59:17

标签: c#

我希望我能得到一些帮助。 我正在尝试使用C#(以最简单的方式)创建基于主机的应用程序来监视从承载应用程序的计算机访问网页,如果在程序运行时访问此网页,则事件应该会增加。 到目前为止,我已经使用了SHDocVw.ShellWindows(),但只有在访问网页时才能访问网页。 它监视Windows Internet Explorer

我也研究过httplistener,但无济于事。

你有解决方案吗? 如果您需要更多详细信息,请与我们联系

3 个答案:

答案 0 :(得分:2)

这可能适用于您的情况,也可能不适用,但我最近必须做一些类似于Intranet网站(跨浏览器,因此它比IE更难)。我的解决方案是设置一个托管WCF服务的客户端应用程序。然后,当用户单击网页上的链接(或引发任何事件,例如$(document).ready)时,它会向服务器发送一条消息,告知服务器连接到与当前会话关联的IP地址(实际上只是请求上的IP地址)在已知端口上。这个连接是在客户端应用程序上进行的,该应用程序正在侦听该IP地址和端口,以获取有关操作的说明(在我的情况下,它是动态编译请求中的代码并运行它)。

这当然只适用于Intranet网站。一种适用于互联网IE的更通用的方法是创建一个在localhost上进行通信的IE扩展(或者可能是一个Silverlight应用程序)。我从来没有这样做过,所以我不能告诉你它是如何实现的(但原则上似乎是可能的)。

如果您根本无法访问该网站,那么使用SharpPCAP或Fiddler API可能对您有用。

答案 1 :(得分:2)

假设问题是“我想知道本地计算机上的程序何时访问授予网页”:透明的http代理可能是您想要采用的方法。查看Fiddler,看看它是否正是您想要的。

如果您的问题更多“我想知道我的远程服务器上何时命中某个特定页面”:有很多监控工具可以解析Web服务器日志和事件日志,以了解服务器的状态。如果您想自己做某事并控制服务器的代码 - 收集您感兴趣的页面的命中信息,并提供报告此数据的页面。

答案 2 :(得分:2)

经过几个小时的工作后,我找到了一个解决方案,而不是迄今为止最优雅的解决方案(并且有时会导致内存转储),但它可以满足我的需求。 感谢

上次编辑时,我通过添加时间解决了崩溃问题,因此每隔一秒左右检查一次页面。 再次感谢你在我的问题中提出的问题。

class wait
{

    private static System.Timers.Timer aTimer;
   public  void timed1()
    {

        // Create a timer with a ten second interval.
        aTimer = new System.Timers.Timer(10000);

        // Hook up the Elapsed event for the timer.
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        // Set the Interval to 2 seconds (2000 milliseconds).
        aTimer.Interval = 2000;
        aTimer.Enabled = true;

        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();


    }


    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {

        //NetKeyLogger klog = new NetKeyLogger();
        // Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
        Kelloggs.Program KKA = new Kelloggs.Program();


        SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
        string filename;

        foreach (SHDocVw.InternetExplorer ie in shellWindows)
        {
            filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
            if (filename.Equals("iexplore"))
            {

                string ddd = (ie.LocationURL);
                // Console.WriteLine(ddd);

                if (ie.LocationURL == "http://www.testPage.com/")
                {
                    Console.WriteLine("Page found");
                    // Console.ReadLine();
                    aTimer.Enabled = false;
                    KKA.Maino();

                }
            }