在没有匹配结果的论坛搜索后,我问听到。
我想将目标端口 80 中的每个浏览器请求重定向到另一个端口(例如 8080)。都在本地主机中。
我的工作场所是linux
,我想使用iptables
规则和python
代码服务器。
我使用的规则是:
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
. 我还尝试了其他一些标志,例如特定的 IP 源和服务器等。
监听 8080 端口的服务器是:
#!/usr/bin/env python
import SimpleHTTPServer
import SocketServer
def redirect_factory():
class RedirectServer(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(301)
self.send_header('Location', 'www.IdontCare.IdontKnow')
self.end_headers()
return RedirectServer
redirectServer = redirect_factory()
handler = SocketServer.TCPServer(('', 8080), redirectServer)
print("serving at port %s" % 8080)
handler.serve_forever()
connection settings
问题是当我在(不添加 iptables 规则)中配置我的浏览器时它运行良好,如下所示:
但是当我使用 iptables 规则时,它说它有一个损坏的管道,并且服务器根本没有收到浏览器请求。因此,如果我在浏览器www.google.com中写入 URL,我将看不到它的self.path
值。
编辑:
这是iptables -t nat -nvL --line-numbers
输出:
规则是有效的,但它没有按照我的设想完成。
我对规则进行了一些调整,如果我放置下一个规则之一,我可以在self.headers
值中的 CNAME 中看到。规则是(我可以选择其中之一):
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 80
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
如果我没记错的话,他们两个都做了同样的事情。
我做错了什么?以及如何使其与浏览器配置等 iptables 规则一起使用?
谢谢!