UDP, NAT : реально ли узнать внешний порт

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

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    Собственно сабж. Возможно ли узнать порт от которого посылает мои пакеты NAT-сервер? IP-адрес не нужен, нужен порт на NAT сервере.
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rpy3uH
    Через внешний сервер и узнать. Только если нат симметричный, то порт будет разный при разных получалетях. [upd] В общем случае - если нат не фулкон, то порт может быть разным.
     
  3. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    т.е. в любом случае надо обращаться к чему-нибудь внешнему? и получать от него порт, от которого он получил мой пакет.
     
  4. _DEN_

    _DEN_ DEN

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

    Да, поскольку никакого стандартного протокола или системы команд для работы со своим NAT-сервером нет. Да и вообще, NAT - это скорее литературный персонаж, чем какой-то исошный стандарт :) Нужен внешний сервер, который будет смотреть на ip:port отправителя пакета.
     
  5. _DEN_

    _DEN_ DEN

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

    Бывают такие наты, которые снаружи открывают тот же порт, что и ты локально (если снаружи такой порт свободен). Но это редкость, и думаю что большая.
     
  6. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    например, у меня есть свой внешний IP-адрес и UDP-сокет через который я шлю и получаю пакеты. как я могу узнать свой внешний порт?

    у меня такая вот идея: слать UDP пакеты на свой внешний IP-адрес на порты 1024-65535, до тех пор пока я на своём сокете не получу свой собственный пакет.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    1. Нат может превентивно резать пакеты с себя на себя.
    2. Перебор портов это долго. Если начать перебирать очень быстро, пров может забанить на несколько десятков секунд (то ли реальный бан, то ли очереди там какие-то переполняются и сессия мрет).
    3. http://en.wikipedia.org/wiki/Network_address_translation -> Methods of Port translation, почитай про типы натов. Знание порта может оказаться бесполезным.
     
  8. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    знаю я про NAT
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rpy3uH
    Тогда просто не понятно, какая практическая польза от знания порта, если, в общем случае, этим знанием никак не воспользоваться. Был бы смысл ставить вопрос более приземленно, типа "какой наиболее универсальный алгоритм для установки p2p-тоннеля".
     
  10. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    _DEN_
    ну почему же?.. Обычно нат так и настраивается. К примеру, в bsd в ipfw, natd (и любом другом нате, основанном на libalias) есть опция same_ports, которая указывает нату по возможности использовать тот же порт. Нет причин ее не использовать.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rmn
    Речь не о теоретической возможности, а о том, как реально делают русские провы.
     
  12. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    у меня дома, в городской сети (витую пару в квартиру кинули), NAT-сервер не меняет внешний порт, в другой сети(через DSL-роутер) порт подменяется, при этом я абсолютно уверен что этот порт на модеме не занят (не может быть так чтобы несколько раз подряд рэндомный порт был занят, не верю я), DSL-роутер почти всегда его меняет. возникла необходимость узнать свой внешний порт, при этом чтобы программа сама это делала.

    задача: программа знает свой внешний IP и есть UDP-сокет который уже успешно работает с внешними адресами (порт уже проброшен на NAT) надо только узнать этот внешний порт
     
  13. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    _DEN_
    так и я не о теории. Включал same_ports на всех серверах и практически во всех конфигах в сети (которые впоследствии копипастят себе русские и не только провы) эта опция включена. Отключать ее незачем - это не дает прирост ни в производительности, ни в безопасности.
     
  14. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    А вы уверены, что знание этого проброшенного НАТом порта даст вам универсальный способ прислать на него снаружи откуда угодно? НАТ вполне может (и по хорошему - обязан таки) держать каждую динамическую трансляцию не для пары сорс-порт/сорс-адрес, а для всей четверки сорс-порт/сорс-адрес/дест-порт/дест-адрес, так что прислать на даже известный порт так, чтоб произошла обратная трансляция, сможет только конкретный внешний хост, на которого и открывалась трансляция.
     
  15. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Русские провы обычно используют аппаратные роутеры. А для NAT - то и вообще специализированные под NAT, типа Cisco PIX.
     
  16. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    знаю и про это, экпериментально выяснил что так делают DSL-роутеры, но с ними хотя бы можно через UPnP провзаимодействовать и пробросить нужный порт.

    мой провайдер, через который работает мой домашний комп, наверно включил same_ports и к нему можно присоединиться откуда угодно через порт, который хоть раз отправил данные во внешний мир
     
  17. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503