Как обнаружить идут ли запросы через Nat или нет?

Тема в разделе "WASM.NETWORKS", создана пользователем neutronion, 15 апр 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    допустим крутится сервак А, как определить идут его запросы через nat на роутере или нет.
    При условии, что мы не задействуем некий наружный сервак Б, который будет принимать запросы сервака А и определять через нат идут запросы или нет.
     
  2. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Почитай про STUN
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    eshkinkot
    Тред не читай @ сразу отвечай ?

    neutronion
    Никак. У тебя есть default gateway, пакеты идут ему. Что происходит дальше - без обратной связи ты никак не узнаешь.
     
  4. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Что если у тебя адреса локальные такие
    * 10.0.0.0—10.255.255.255;
    * 172.16.0.0—172.31.255.255;
    * 192.168.0.0—192.168.255.255.

    и при условии, что пингуется например www.mail.ru, тогда теоретически мы за натом, так как
    * 10.0.0.0—10.255.255.255;
    * 172.16.0.0—172.31.255.255;
    * 192.168.0.0—192.168.255.255.
    могут быть только в локальной сетке? Может ли быть такая ситуация, у тебя адрес не входит
    в диапазон * 10.0.0.0—10.255.255.255;
    * 172.16.0.0—172.31.255.255;
    * 192.168.0.0—192.168.255.255.
    но тем не менее ты за натом?
    Правда существует извращенческая ситуация, когда я настраиваю так локалку
    12.12.12.12 ручником, тогда упс!
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neutronion
    Ты разговариваешь сам с собой?

    Ты же сказал, что
     
  6. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    так и есть не задействуются. Я имел ввиду свой личный сервак, который принимает пакет
    от некого удаленного хоста, в теле пакета содержится локальный ip , того кто послал пакет.
    Соответственно, сервак сравнивает ip полученного пакета и ip который заключен внутри пакета, если они разнятся, это значит что удаленный хост за натом. Пинг же www.mail.ru дает всего лишь понять, что связь с глобальной сетью имеется, но эта инфа не дает понять за натом мы или нет, так как роутер подменяет ip адреса.
     
  7. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Блин, сложно рассказал. Надеюсь поняли.
     
  8. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    В общем есть хост А, который хочет понять за натом он или нет. Есть хост Б на котором крутится наш сервак, который помогает понять хосту А за натом он или нет.
    хост А посылает пакет, в данных которого зашифрован его локальный ип.
    Соответственно хост Б смотрит ип пакета и ип, который зашифрован в теле пакета.
    Если они разняться, это значти, что хост А за натом, что хост Б и сообщает хосту А.
    Так наверное лучше.
     
  9. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Похоже на 100% не удастся решить такую задачу. Без помощи извне я имею ввиду.
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neutronion

    Достаточно сделать сервер, который будет отвечать удаленным IP, а сравнение сделает сам клиент:

    Код (Text):
    1. boost::asio::io_service io_service;
    2. boost::asio::ip::tcp::acceptor acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
    3. boost::asio::ip::tcp::socket sck(io_service);
    4. acceptor.accept(sck);
    5. sck.send(boost::asio::buffer(sck.remote_endpoint().address().to_string()));
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neutronion
    Если не использовать протокол IP, то нет и самой задачи - IP-адрес это понятие протокола IP.
     
  12. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Что если не использовать протоколы TCP/IP?
    Кажется я понял, как это можно сделать! Нужно использовать tracert, Т.е.
    протоколы icmp. Ведь какая проблема, локальные адреса могут быть нестандартные, однако наружный роутер, которые является конечной точкой между локалкой и интетом, просто обязан иметь стандартный локальный адрес из диапазонов которые я указал выше в топе. Если этого не будет, тогда может произойти конфликт адресов в Глобальной сети и в локальной, чего допустить нельзя! Значит если в цепочке трасерта встречается хоть один локальный адрес, значит мы за натом! Что думаете коллеги, не лоханулся ли я где?
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neutronion

    Все это хорошо, но только нат может не позволить принимать TTL exceeded от хостов, которые не являются destination-хостами в твоем PING-е. И да, ICMP - это тоже IP.
     
  14. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    К сожалению роутер может подменить ип адреса удаленных хостов ,которые ломятся на локальный сервер.
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neutronion

    Откуда взялся роутер? Сервер же имеет внешний IP.
     
  16. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Да в Ip стеке. Но нам достаточно, чтобы роутер ответил на ICMP. Хотя он может быть настроен так, что тоже будет играть в молчанку... :dntknw: Так?
     
  17. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    neutronion

    Во-первых - может не ответить сам роутер. Во-вторых - ответ роутера может не пустить нат. Еще есть в третьих, в четвертых и в пятых.
     
  18. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Клиент же крутится на локальной машине и хочет узнать за натом он или нет.
    Условие: внешнего сервера нет. Локальному клиенту надо самому разобраться за за натом или нет. Внешний сервер я привел как просто решение. Однако надо сделать без внешней помощи.
     
  19. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    На роутере и настроен нат. Но то что он может послать и не ответить, вот это проблема!
     
  20. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Можно конечно попробовать на уровне arp пакетов.