我想要做的是以这种方式redirectnetworkingstream量:
每个端口80的请求都应该被redirect到一个特定的端口(4444)。
其他每个请求都会转到80端口。
由于我不能通过使用networking代理模块和/或出于各种原因转发,我正在寻找一种方法来做到这一点与iptables。 受这篇文章的启发,我对我的iptables使用了这个规则:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 \ -m string --algo bm --string 'GET /mjpegcgi.cgi' \ -j REDIRECT --to-port 4444
然后,我打开两个netcat进程在4444和80上进行侦听。但是,当我尝试使用以下规则testing规则时:
wget -qO- http://192.168.1.88/mjpegcgi.cgi
我所拥有的只是端口80的响应。 我究竟做错了什么?
你不能像这样使用string匹配来redirect连接。 在GET
请求结束时,连接已经build立。 请记住,TCP连接始于三次握手 ; build立连接的交换不包含任何HTTP协议数据。
此外, REDIRECT
规则不会影响源自本地主机的stream量。 如果您正在testingREDIRECT
规则,请确保您正在从另一个系统进行testing。
你真的需要实现一个协议级别的代理来做这种事情(例如,Apache的代理目标的mod_rewrite
可以工作)。