Перенаправить запрос на внешний IP на локальный хост (эмулировать сервер)

12

Я получил приложение (без исходного кода), вызывающее сервер (с жестким кодом IP) и ожидающее ответа перед запуском (своего рода логин).

Поскольку сервер не работает половину времени, я хочу создать фиктивный сервер, который будет эмулировать поведение официального сервера.

Моя проблема:

Как я могу перенаправить трафик на мой локальный компьютер?

Я хочу, чтобы все запросы, отправленные на IP wxyz, были перенаправлены на localhost (где работает мой фиктивный сервер)

Больше информации:

  • мой фиктивный сервер - решение apache / php.
  • Я попытался отредактировать жестко запрограммированный IP-адрес в приложении с помощью шестнадцатеричного редактора, но при запуске приложения некоторые контрольные суммы не выполняются.
  • поскольку IP-адрес жестко задан в приложении, я не могу использовать файл hosts.
  • Я бегу Win XP.

related: Как перенаправить трафик с одного IP на другой IP в Windows Server 2008

Loda
источник

Ответы:

8

Это будет полный взлом, но вы можете попробовать назначить IP-адрес рассматриваемого сервера в качестве дополнительного IP-адреса на локальном интерфейсе, инструкции здесь

Роберт Суишер
источник
Это выглядит великолепно! но я не могу попробовать сейчас, (мой интернет не работает, я привязываюсь к 3G ..). Я даю вам обратную связь в конце следующей недели.
Лода
1
Это действительно круто! работает отлично, очень простое решение. Благодарность !
Лода
Милый, рад это слышать :)
Роберт Суишер
1
Точность: добавление 2sd IP в мой сетевой адаптер имеет побочный эффект; все IP в том же внешнем subred перенаправляются на мою сетевую карту. То есть: при добавлении IP 50.51.51.51 IP 50.51.51.52 больше недоступен. Это вызвано маршрутом 50.51.51.0 и маршрутом 50.255.255.255. Обходной путь: добавьте маршрут 50.51.51.52 -> обычный шлюз.
Лода
ссылка не работает
Данило
2

Ну, вы можете попробовать следующее:

Установите конкретный маршрут для этого IP-адреса, который будет использовать фиктивный сервер в качестве шлюза, например:

добавление маршрута -host wxyz / 32 gw dummy-server-ip

Для этого вам потребуется либо доступ к основному маршрутизатору вашей сети, либо вы должны сделать это на машине, которая отправляет запросы. Это эффективно отправляет пакеты TCP с IP-адресом wxyz на MAC-адрес фиктивного сервера. Теперь вам нужно убедиться, что фиктивный сервер знает, что с ними делать.

Затем добавьте IP-адрес wxyz в качестве дополнительного адреса на фиктивный сервер.
Наконец, обновите конфигурацию apache на фиктивном сервере, чтобы убедиться, что он также прослушивает адрес wxyz, и убедитесь, что виртуальный хост на фиктивном сервере принимает входящие запросы как для IP-адреса, так и для имени домена.

Обратите внимание, что это будет работать только в том случае, если между запрашивающей машиной и фиктивным сервером нет других маршрутизаторов. И если есть какие-либо брандмауэры, они также нуждаются в обновлении.

wolfgangsz
источник
Спасибо за ответ, это похоже на то, что я хочу сделать. но у меня возникли проблемы с его реализацией. Я предпочитаю не трогать маршрутизатор, потому что решение должно быть эксклюзивным для моей машины. Команда, которую вы мне привели в качестве примера, не работает на моем win xp. Я также попытался "добавить маршрут wxyz 127.0.0.1" без успеха. У меня нет межсетевого экрана / маршрутизатора между приложением и фиктивным сервером. они оба работают на одной машине. (Но у меня есть программный брандмауэр: kaspersky) Я буду очень признателен за помощь в настройке этого маршрута.
Лода
1
Для Windows есть команда route: route ADD wxyz MASK 255.255.255.255 127.0.0.1 Это укажет маршрут обратно на ваш собственный компьютер. Возможно, вам придется открыть брандмауэр для входящих запросов по адресу wxyz.
wolfgangsz
Я попытался добавить маршрут с помощью этой команды, но безуспешно. не знаю почему
Лода
«добавление маршрута 62.1.1.10 маска 255.255.255.255 127.0.0.1» В сообщении об ошибке говорится: «ошибка добавления маршрута: неверный параметр» (перевод с ES)
Loda
Хм, может быть, вам нужно заменить 127.0.0.1 на фактический IP-адрес локальной сети этого интерфейса. Я никогда не пробовал ничего подобного раньше, так что тут есть немного догадок.
wolfgangsz
1

Возможно, вы могли бы что-то грохнуть вместе с iptables. Вот то, что я когда-то использовал, но больше не делаю, чтобы дать вам опору:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 172.16.25.202 -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to 172.16.27.59:8025
-A POSTROUTING -o eth0 -j MASQUERADE 
COMMIT

NB: я сделал это давным-давно, там могут быть ошибки

Единственное, что я вижу, это может быть проблемой, это то, что это специфично для интерфейса. Я думаю, что eth0 только для входящей части, поэтому использование ip на интерфейсе lo (127.0.0.1) в качестве цели все еще может работать ...

jj33
источник
1
Это был бы отличный ответ ... но он работает под управлением Windows XP.
Джейсон Берг
Doh! Кажется, я увидел «apache / php» и перестал читать. Даже после того, как ты указал на это, я трижды отсканировал, прежде чем увидел. О, хорошо, я оставлю это, может быть, это когда-нибудь кому-нибудь поможет.
jj33
Я думаю о Vagrant, busybox и iptables для создания селективного VPN. Я хочу сообщить своей системе, что только несколько известных IP-адресов принадлежат VPN, поэтому трафик в другое место не будет проходить через VPN. Моя идея состоит в том, чтобы использовать очень легкий Linux в качестве busybox для подключения к VPN, а затем с помощью iptables, файла hosts или чего-то подобного перенаправить запросы известных IP-адресов на гостевую виртуальную машину Vagrant, чтобы она могла обрабатывать VPN , Эти правила iptables могут оказать мне некоторую помощь :)
Бруно Фингер