2

我想编写一个程序来通过数据包捕获提取系统访问的网站的 URL(IP 地址)。我认为这个 URL 将出现在数据部分(即不在任何标题中 - ethernet / ip / tcp-udp )..(这些程序有时被称为 http 嗅探器,我不应该使用任何可用的工具)。作为一个初学者,我刚刚完成了这个基本的嗅探器程序:sniffex.c .. 谁能告诉我应该朝哪个方向前进..

4

6 回答 6

4

不,没有足够的信息。一个 IP 可以对应于任意数量的域名,并且每个域名都可以有无数个 URL。

但是,请查看 gethostbyaddr(3) 以了解如何对 ip 进行反向 dns 查找,以至少获得该 ip 的规范名称。

更新:当您编辑问题时,@aehiilrs 有一个更好的答案。

于 2010-01-15T16:40:21.627 回答
4

注意:在下面的信息中,假设 GET 还包括 POST 和其他 HTTP 方法。

这肯定比查看一个数据包要多得多,但是如果您捕获整个流,您应该能够从发出的 HTTP 标头中获取它。

尝试查看 Host 标头(如果提供),以及 GET 实际请求的内容。GET 可以是完整的 URL,也可以只是服务器上的文件名。

另请注意,这与从 IP 地址获取域名无关。如果你想要域名,你必须挖掘数据。

我的机器上的快速示例,来自 Wireshark:

GET http://www.google.ca HTTP/1.1
Host: www.google.ca
{other headers follow}

另一个例子,不是来自浏览器,在 GET 中只有一个路径:

GET /ccnet/XmlStatusReport.aspx HTTP/1.1
Host: example.com

在第二个示例中,实际 URL 是http://example.com/ccnet/XmlStatusReport.aspx

于 2010-01-15T17:08:35.250 回答
0

您可能想要的是反向 DNS 查找。为此,请致电 gethostbyaddr。

于 2010-01-15T16:40:42.430 回答
0

如果您使用的是 Linux,您可以在 iptables 中添加一个过滤器以添加一个新规则,该规则查找包含 HTTP 获取请求的数据包并获取 url。

所以规则看起来像这样。

对于从本地主机到端口 80 的每个数据包 -> 检查数据包是否包含 GET 请求 -> 检索 url 并保存它

这种方法应该适用于所有情况,即使对于 HTTPS 标头也是如此。

于 2010-01-15T17:08:40.150 回答
0

看看PasTmon。http://pastmon.sourceforge.net

于 2010-01-16T00:00:18.287 回答
0

我正在研究类似的东西并遇到了这个。如果您使用的是 linux - justniffer,希望这可能是一个好的开始。

http://justniffer.sourceforge.net/

如果您希望从 HTTP 请求中获取信息,还有一个不错的 http 流量抓取 python 脚本会有所帮助。

于 2011-07-08T03:10:55.127 回答