【发布时间】:2019-04-07 05:42:03
【问题描述】:
我需要能够验证来自一组 HTTP 服务器的响应数据上的 TOS/DSCP 标记。是否有可能,给定一个目标 URL 列表来测试,如果go 中有一种方法可以生成 HTTP 请求,然后能够检查响应的 TCP 数据包详细信息以获得 TOS 值?
此时我的假设是,它可能需要创建一个套接字,然后动态生成一个包含 HTTP 请求负载的 TCP 数据包。我一直在四处寻找是否有任何库可以帮助完成这项任务,但还没有找到任何具体的东西。
注意:简单的 TCP 连接将无法提供足够的数据 - 相关目标服务器将根据 HTTP 服务器名称动态更改 TOS/DSCP 标记(因此基本上,单个物理服务器将根据不同的 TOS 标记进行响应) vHost 请求),因此能够验证实际 HTTP 响应数据包上的 TOS 非常重要,而不是像 ping 这样简单的东西。 TCP 3 次握手中的 TOS 值也不可信 - 它必须是包含 HTTP 数据的数据包。
【问题讨论】:
-
TCP 是一个流,在应用层看不到实际的数据包。您需要发出正常请求并在较低层检查数据包。
-
如果你想生成数据包,你可能想先看看godoc.org/github.com/google/gopacket
-
是的,我意识到这一点。我想我想知道的是,我是否需要在底层完成所有工作,或者我可以使用更高级别的函数发出 HTTP 请求,但仍然可以使用低级函数访问响应数据包。我拥有的旧工具基本上执行
curl,然后立即开始侦听数据包。它有效,但效率不高。我现在只是在研究一些简化检查的方法。 -
“简单”的方法是做你的 curl 客户端所做的事情,并在请求期间嗅探接口。然而,Go 客户端只需要一个
net.Conn,因此如果您可以使用gopacket创建一个已检测的客户端,那么它可以直接放入客户端。 -
如果您设法创建了 JimB 建议的检测连接,the Transport's DialContext field 就是您要找的。span>
标签: go