【问题标题】:Url capture from raw data packets?从原始数据包中捕获网址?
【发布时间】:2012-08-01 15:24:08
【问题描述】:

我们正在捕获每个采用这种格式(十六进制字节)的网络数据包。问题是我们想获取url,如果它以http://......的形式存在于数据包中?解释它以捕获 url 的最佳方法是什么?现在我们正在寻找http字符然后处理但是在哪里结束是另一个问题?

0000000 cf fa ed fe 07 00 00 01 03 00 00 80 02 00 00 00 0000010 0c 00 00 00 28 07 00 00 85 80 01 00 00 00 00 00 0000020 19 00 00 00 48 00 00 00 5f 5f 50 41 47 45 5a 45 0000030 52 4f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000040 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 0000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000060 00 00 00 00 00 00 00 00 19 00 00 00 78 02 00 00

【问题讨论】:

  • 您对协议有任何了解吗?如果您已经知道存在未编码的 ascii 字符,也许 gnu binutil 中的 strings 可以提供帮助。
  • @jokester 这些是原始数据包,我猜主要是 tcp 或 udp 对吧?
  • 你读过RFC2616吗?据我所知,文本“http://”实际上并没有出现在数据包中。它只是告诉浏览器使用 HTTP 协议。然后,浏览器将与协议定义的相关 HTTP 服务器建立连接。您需要嗅探看起来像 HTTP 的数据包,并将目标 IP 转换回一个名称 - 这可能与原始 URL 的名称不同。
  • 名称在 HTTP 协议的 Host: 标头中。这是强制性的,因为绝大多数网站都是虚拟托管在共享 IP 地址上的。
  • url 的其余部分(路径名)在最初的GET 行中。

标签: network-protocols


【解决方案1】:

从您的问题来看,听起来您有您感兴趣的数据包,但您对协议的名称或其格式一无所知(除了它不是 HTTP - 如果它是子字符串您说您发现最有可能不会出现的“http”)。

Wireshark 了解许多网络协议,这将是帮助您了解协议是什么以及其中的数据如何格式化的良好开端。

如果 Wireshark 无法识别该协议,那么您可能只能靠自己了,除非您可以提供有关数据包来自何处以及它们的用途的更多详细信息。进行初始连接尝试的 TCP 端口号通常是一个很好的线索。可能对您的最后一个问题有所帮助的一件事是字符串通常以零字节结尾。

【讨论】:

  • 好的,我们正在使用一个名为 pf_ring 的工具来捕获原始数据包头,我们想知道从特定网络访问的 url。显然数据包会有url信息?除了添加是的,我们也一直在玩wireshark。希望现在更清晰了?
  • 你是说Wireshark不能识别协议? Wireshark 是否可以识别任何协议层(例如 UDP、TCP)?
  • 我认为wireshark可以从我注意到的大部分协议中识别出来?那么现在的问题是如何最好地从原始数据包中捕获正确的 url,您对此有何看法?
  • 是的,没错。 HTTP GET 命令包括 URI。 HTTP 是一种基于消息的协议。它通常通过基于流的 TCP 套接字发送。因此,当您查看单个网络数据包时,您不知道它是否包含单个消息、消息的片段,甚至是来自多个消息的片段。这就是我在之前的评论中提出这些问题的原因。如果您能回答我的问题,我可能会为您提供进一步的帮助。
  • 好吧,我就这么说吧:查看单个数据包是行不通的。如果这是基于 TCP 的 HTTP 协议(​​您还没有说是否是这种情况),那么您需要捕获整个流并将其解析为 HTTP 解析器。您可以通过查看 TCP 标头中的 IP 地址和端口号来区分相关的数据包。尝试使用 Wireshark,以更好地了解这一切是如何工作的。祝你好运。
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2014-01-12
  • 2023-03-25
  • 2013-10-29
相关资源
最近更新 更多