После поиска на форумах без подходящих результатов, я спрашиваю "слышать".
Я хочу перенаправить каждый запрос браузера с порта назначения 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, он говорит, что у него сломан канали запрос браузера вообще не получен на сервере.Поэтому, если я напишу в URL в браузере www.google.com , я не смогу увидеть его со значением self.path
.
РЕДАКТИРОВАТЬ: Вотвывод iptables -t nat -nvL --line-numbers
:
правило работает, но оно не выполнено, как я полагаю.
Я немного играюс правилами, и если я добавлю одно из следующих правил, я могу увидеть в CNAME значение self.headers
.правила (я могу просто выбрать один из них):
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, как конфигурация браузера?
Спасибо!