【问题标题】:See what website the user is visiting in a browser independent way以独立于浏览器的方式查看用户正在访问的网站
【发布时间】:2010-11-15 20:39:52
【问题描述】:

我正在尝试构建一个应用程序,该应用程序可以在用户访问我的数据库中存在的网站时通知他们有关网站特定信息的信息。这必须以独立于浏览器的方式完成,以便用户在访问网站时始终可以看到信息(无论他或她使用什么浏览器或其他工具访问该网站)。

我的第一个(部分成功)方法是使用 System.Net.Sockets.Socket 类等查看数据包。不幸的是,我发现这种方法仅在用户具有管理员权限时才有效。当然,这不是我想要的。我的目标是用户可以安装一个相对简单的程序,可以立即使用。

在这之后,我开始寻找替代方案,并发现了很多关于 WinPcap 和其中一些 .NET 包装器的信息(我是否告诉过你我已经在编写 c# .NET 了?)。但是使用 WinPcap,我发现它必须安装在用户的电脑上,并且没有办法只引用一些 dll 文件和代码。我已经考虑在我的安装程序中包含 WinPcap 作为先决条件,但这也很麻烦。

嗯,长话短说。我想在我的应用程序中知道我的用户正在访问哪个网站。我认为这必须通过查看网络的数据包来完成,但找不到一个好的解决方案。我的应用程序是在 C# .NET (4.0) 中构建的。

【问题讨论】:

    标签: sockets networking web packet winpcap


    【解决方案1】:

    您可以使用Fiddler 来监控互联网流量。 这是

    一个 Web 调试代理,它记录您的计算机和 Internet 之间的所有 HTTP(S) 流量。 Fiddler 允许您检查流量、设置断点以及“摆弄”传入或传出数据。 Fiddler 包含一个强大的基于事件的脚本子系统,并且可以使用任何 .NET 语言进行扩展。

    它是可编写脚本的,可以很容易地used from .NET

    【讨论】:

      【解决方案2】:

      一个简单的想法:与其直接监控流量,不如安装一个向您发送页面当前 URL 的浏览器扩展程序。然后,您可以检查该 url 是否在您的数据库中,并可以选择使用浏览器扩展向用户显示一条消息。

      这就是Invisible Hand 等扩展的工作原理...它扫描当前页面并将相关数据发送回服务器进行处理。如果它找到任何东西,它会使用浏览器扩展框架将这些结果传达给用户。 (使用警报或窗口顶部的栏等)

      【讨论】:

      • 嗯,看不见的手的想法与我试图实现的想法有些相同,但我不想被绑定到一个(或多个)特定的浏览器。这就是为什么我认为查看网络数据包更好。有了扩展,我必须为每个浏览器制作一个扩展(并维护它们)。顺便谢谢你的回复!
      【解决方案3】:

      为了一个好的开始,wireshark 会做你想做的事。 您可以指定一个过滤器来隔离和查看 http 流。

      最好的部分是wireshark是开源的,并且建立在另一个程序api上,winpcap是开源的。

      我猜这就是你想要的。

      1. 离线捕获网络数据
      2. 查看计算机的 tcp 流量,隔离并保存(部分或部分)http 数据。
      3. 存储有关 http 连接的信息

      第 1 点很简单,你可以在谷歌上搜索 winpcap 教程,或者只是使用他们的一些示例程序来捕获数据。 我建议你学习 pcap 文件格式,winpcap 的所有内容都使用这种基本格式及其结构。

      现在您必须学习如何获取一个 tcp 流并将其转换为一个可靠的数据流,而无需压缩选项或杂乱无章的部分。 (对不起拼写) 同样,在wireshark源代码中可以找到一个很好的例子。

      然后使用您的数据流,您可以简单地读取 http 格式和 html 数据,或者您处理的任何内容。

      希望有帮助

      【讨论】:

      • 感谢您的回复...我尝试使用 winpcap 但不幸的是这不适用于无线连接...现在似乎有 airpcap 但它并非在所有情况下都有效。所以......我仍然坚持这个。
      • 所以您需要一个受控网关。您在其中路由所有流量。更多。轻松地仅应用 arp 流量。做一个重定向的回声服务器。仅过滤您想要的流量并转发您不处理或跟踪的所有其他流量。 winpcap 可以做到这一切。你只需要对网络协议有更深入的了解
      【解决方案4】:

      如果用户正在合作,您可以让他们将浏览器设置为使用您提供的代理服务。这将拦截所有网络流量,对它做任何你想做的事情(在你的数据库中查找,通知用户等),然后将它传递到原始位置。在本地系统上运行代理,如果更适合您的情况,则在远程系统上运行。

      如果用户不配合,或者您不想让他们更改浏览器设置,您可以使用其中一种数据包嗅探解决方案,例如 fiddler。

      【讨论】:

        【解决方案5】:

        一个简单直接的方法是将计算机 DNS 更改为指向您的应用程序。 这将导致所有 DNS 流量通过您的应用程序,这些流量可以被嗅探,然后重定向到真正的 DNS 服务器。 它还将为您省去过滤掉 emule/torrent 流量的麻烦,因为它通常使用纯 IP 地址(这也可能是一个问题,因为它可以通过使用 IP 地址浏览来规避)。

        -How to change windows DNS Servers

        -DNS resolver

        另一种简单的方法是(以编程方式)配置浏览器代理以通过您的服务器,这将使您的生活更轻松,但对用户来说更明显。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-04
          • 2020-09-04
          • 1970-01-01
          • 1970-01-01
          • 2010-09-12
          • 2019-06-22
          • 2015-03-23
          • 1970-01-01
          相关资源
          最近更新 更多