1

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

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

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

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

4

5 回答 5

1

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

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

于 2010-11-15T20:47:50.617 回答
1

您可以使用Fiddler来监控 Internet 流量。这是

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

它是可编写脚本的,并且可以从 .NET 轻松使用

于 2011-08-27T23:54:40.537 回答
0

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

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

我猜这就是你想要的。

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

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

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

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

希望有帮助

于 2011-07-30T02:02:13.750 回答
0

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

-如何更改 Windows DNS 服务器

- DNS解析器

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

于 2011-08-30T10:00:44.873 回答
0

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

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

于 2011-08-30T12:26:13.213 回答