如何通过libnet构建和发送HTTP 302重定向数据包?

时间:2015-03-23 09:10:17

标签: c linux libnet

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

HTTP/1.1 302 Moved Temporarily
Location: http://www.example.com

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

感谢所有答案。

1 个答案:

答案 0 :(得分:0)

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

一般情况下,无法通过使用仅监控流量的被动设备执行复杂的应用程序级响应,但流量不会通过通过被动设备。

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

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

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

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