0

在没有匹配结果的论坛搜索后,我问听到。

我想将目标端口 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 中看到。规则是(我可以选择其中之一):

  1. iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 80
  2. iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1

如果我没记错的话,他们两个都做了同样的事情。

我做错了什么?以及如何使其与浏览器配置等 iptables 规则一起使用?

谢谢!

4

0 回答 0