【问题标题】:writing a http sniffer编写一个 http 嗅探器
【发布时间】:2010-01-15 16:38:10
【问题描述】:

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

【问题讨论】:

  • 我刚刚编辑了我的问题,现在我理解得更好了......
  • 听起来和我以前的 CSE 409 作业一模一样。

标签: http url network-programming packet-capture packet-sniffers


【解决方案1】:

注意:在下面的信息中,假设 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

【讨论】:

  • 嗯,所以我首先需要解析有效负载部分,查找 GET 和主机部分,然后提取 URL。是正确的..
  • 不仅仅是获取。还有其他 http 命令。您需要先阅读一些文档。
  • Wireshark 是一个开源工具,我能得到任何方便的代码吗..(我没有太多时间来编写它,因为这只是我项目的一部分 - 它涉及 URL因此被捕获)
  • 可能。我还没有仔细阅读过 wireshark 的源代码,但它会在某个地方。
【解决方案2】:

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

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

更新:当您编辑问题时,@aehiilrs 有一个 much better answer。

【讨论】:

  • 你不能。你不妨问我如何从一个人的电子邮件地址中分辨出他们的头发颜色。
  • 如果是 redhead1234@freecrapemail.com 之类的怎么办?
【解决方案3】:

您可能需要的是反向 DNS 查找。为此请调用 gethostbyaddr。

【讨论】:

    【解决方案4】:

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

    所以规则看起来像这样。

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

    这种方法应该适用于所有情况,甚至适用于 HTTPS 标头。

    【讨论】:

    • 是的,我正在使用 Linux.. 按照规则,您是指程序中的条件块吗..
    • 他实际上指的是iptables规则,iptables是内置防火墙。
    【解决方案5】:

    【讨论】:

      【解决方案6】:

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

      http://justniffer.sourceforge.net/

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

      【讨论】:

        猜你喜欢
        • 2014-01-22
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 2010-10-20
        • 2011-09-02
        • 1970-01-01
        相关资源
        最近更新 更多