-1

我正在开发一个系统,它可以检测本地网络中的请求。如果客户请求某个站点,系统将发送一个 http 重定向数据包。我通过 libnet 构建 http 重定向数据包,新的 uri 设置在 Location 中,如:</p>

HTTP/1.1 302 暂时移动
位置:http://www.example.com

但它不起作用,浏览器不会进入新站点。客户没有发送新的 GET 请求来重定向 url。

感谢所有的答案。

4

1 回答 1

0

您真正想要做的是实现一个嵌入式深度数据包检测设备,该设备检测 TCP 流、HTTP 标头并在检测到对某个站点的访问时执行自己的响应。

一般来说,不可能通过使用仅监视流量但流量不会通过无源设备的无源设备来执行复杂的应用程序级响应。

您很可能需要使用 netfilter 挂钩进行一些 Linux 内核级开发。如果您更喜欢进行用户空间编码,则可以将数据包传递给用户空间并再次返回内核空间。我的观点是在用户空间中执行复杂的深度包检查会更好。

为了解析 HTTP 标头,您很可能需要创建自己的解析器生成器,因为现有的解析器生成器都不能满足深度数据包检查的所有需求。特别是,您希望将数据推送到解析器中,而不是让解析器通过调用返回一条数据的函数来拉取数据。解析器必须以增量方式工作。所以,yacc 或 bison 不起作用。此外,实际上没有一个网络协议在设计时考虑到两阶段(词法分析器,解析器)解析,因此您很可能需要一个将词法分析器和解析器集成为一个并根据解析器打开和关闭词位的解决方案语境。这不是一件容易的事。但是,没有解析器生成器来生成 HTTP 标头解析代码将是一个完全维护的地狱。之前也试过了,简短的总结就是:don'

请考虑深度数据包检查设备具有称为规避的东西。例如,如果看到“G”、“E”、“T”、“”、“/”、“”而不是“GET / HTTP/1.1\nHost: badsite.com\n\n”,你会怎么做,“H”,“T”,“T”,“P”,“/”,“1”,“.”,“1”,“\n”,“H”,“o”,“s”, “t”、“:”、“”、“b”、“a”、“d”、“s”、“i”、“t”、“e”、“.”、“c”、“o” , "m", "\n", "\n" 在不同的 TCP 段中?如果您想处理系统中的深度数据包检查规避,您将面临很多工作。

免责声明:我曾在一家主要的网络安全设备供应商工作,所以我知道这些东西是如何实现的。

于 2015-03-23T12:19:25.893 回答