На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Алгоритм получения из IP-адреса (IPv4) частной сети класса "А"
    Всем хай! Сходу к делу.
    Условие звучит так.
    Задан 4рех байтовый IP-адрес (4 октета в виде десятичных чисел из отрезка [0 .. 255]). Необходимо преобразовать этот адрес в адрес частной сети класса "А".
    ------------------------------------------------------------------------------------------
    Информации об адресации в гугле, конечно, валом...тысячи и тысячи страниц.

    Относительно частной сети класса "А" нашел лишь только такую информацию:
    1ый октет (самый левый) всегда = 10.
    Маска подсети: 255.0.0.0
    Диапазон адресов: 10.0.0.0 - 10.255.255.255

    Пример такого адреса: 10.192.168.40


    Но ничего не смог найти по алгоритму преобразования из произвольного айпишника в адрес частной сети класса "А". Может плохо искал, а на самом деле слишком плохо знаю эту область и, возможно, что-то и было по этому переводу, но не смог "разглядеть" смысл)
    ---------------------------------
    Вот, например, задали такой IP-адрес: 233.4.29.191
    Адрес частной сети класса "А" будет иметь начало 10. а дальше, что )
    Что требуется сделать, чтобы получить адрес частной сети класса "А"? Подскажите как быть-то :unsure:

    P.S. там вроде какие-то побитовые конъюнкции надо использовать, но, насколько помню, это требуется для определения номера узла в сети или количества узлов в сети и все в таком духе
    Сообщение отредактировано: FasterHarder -
      Еще покопал тему. Начинаю приходить к выводу, что НЕ существует готового алгоритма такого преобразования. То есть придется с 0 что-то придумывать :unsure:
      В большинстве задач, как я понял, дают IP-адрес + маску сети. И тогда возможны какие-то варианты: и конъюнкции побитовые брать, и считать кол-во ведомых нулей в маске и пр.

      Но в моем условии дают ТОЛЬКО 4рех байтовый IP-шник и все.
      То есть мат. модель такая что ли получается: IP-адрес (IPv4) --> 10.XXX.XXX.XXX?
      То есть, дали айпишник, в нем 4ре числа из отрезка [0 ... 255] и их надо каким-то образом конвертировать в 3ри октета (1ый октет у адресов класса "А" всегда = 10)??

      Т е, если отбросить все эти сети, шлюзы, маршрутизации, каналы, маски, подсети и пр. и пр. пр., то задачу можно свести к такой: преобразовать 4ре числа из отрезка от 0 до 255 в 3ри числа из отрезка 0 до 255? )) Но ведь это не всегда возможно - это раз. Во-вторых, наверняка, есть какие-то внутренние ограничение адреса в частной сети "А" помимо того, что самый левый октет = 10 всегда

      резюме: не понимаю пока даже на 5%, к чему стремиться :wall:
        Чёта дурь, а не задание. Отрыжка мохнатого ретрограда, до сих пор не знающего, что классы сетей - забытый и прочно игнорируемый анахронизм.

        Но если вернуться на дофига лет назад...

        Цитата FasterHarder @
        Задан 4рех байтовый IP-адрес (4 октета в виде десятичных чисел из отрезка [0 .. 255]). Необходимо преобразовать этот адрес в адрес частной сети класса "А".

        У сети класса А маска /8, оно же 255.0.0.0. Накладываем - получаем адрес сети. ВСЁ.
        Цитата FasterHarder @
        Вот, например, задали такой IP-адрес: 233.4.29.191

        Соответственно сеть класса А, в которой находится этот адрес: 233.4.29.191 AND 255.0.0.0 = 233.0.0.0.

        Цитата FasterHarder @
        Относительно частной сети класса "А" нашел лишь только такую информацию

        Ну вообще-то если подходить строго, то нет такого понятия как "частная сеть" на уровне стандарта. Это всё завихрения от переводчиков. Есть маршрутизируемые и немаршрутизируемые адреса. Всё остальное - или следствие, или выдумки переводчиков.

        И в данном задании термин "частная" явно не связан с "приватными"/"серыми" адресами. Это обязательное условие того, чтобы задание имело хоть какой-то смысл.
          Цитата Akina @
          Соответственно сеть класса А, в которой находится этот адрес: 233.4.29.191 AND 255.0.0.0 = 233.0.0.0.

          хорошо, это я понял + знаю, как запрограммировать

          но в условии есть фраза, мол "Адреса "частных сетей" класса А всегда начинаются с 10, например, 10.240.55.17"
          а в этом примере самый левый октет = 233, а 233 не равно 10)
          или игнорировать придется это "требование"?
            Цитата FasterHarder @
            в условии есть фраза, мол "Адреса "частных сетей" класса А всегда начинаются с 10, например, 10.240.55.17"

            В упор не вижу этой фразы в условии.
              Цитата Akina @
              В упор не вижу этой фразы в условии

              так, вот тогда картинкой даже приложу

              Прикреплённая картинка
              Прикреплённая картинка


              зы: в 1ом посте еще писал, что нашел инфу, что с "10" начинается как раз
                О! так с этого и надо было начинать!

                От тебя фактически просят родить NAT...
                  Цитата Akina @
                  От тебя фактически просят родить NAT...

                  ого - впервОЙ слышу об этом даже)
                  кстати, еще на др.форумах тоже упоминали вскользь про этот НАТ + ссылались на то, что постановка некорректна + давали какие-то алгоритмы типа моих из 1ого поста

                  мне кажется, что полноценный НАТ мне НИКОГДА не реализовать в принципе (хотя я не знаю, что это такое), но чувствуется, что-то сложное). Ведь нужно только для класса "А". Вот если все донельзя упростить, вот прям до нижнего предела, то может тут есть какой-то простой алгоритм? Типа взять 2 октет входного айпишника, наложить маску, затем взять побитовую дизъюнкцию с 3им октетом и все в таком духе?)

                  зы: открыл про НАТ статью: мда уж, совсем чужая тематика для меня, вот прям на 100%....

                  Добавлено
                  Скрытый текст
                  я ведь вообще залез в эту задачу, чтобы поработать с побитовыми операциями более плотно)) Сети, как таковые, мне, конечно, неинтересны, точнее, понимаю, что нет даже смысла их изучать, т к потребуются годы на все это изучение...
                    Цитата FasterHarder @
                    потребуются годы на все это изучение

                    На изучение того, что необходимо для осмысленного решения поставленной задачи, нужно от силы 2-3 часа. Плюс сколько-то, чтобы оно улеглось в голове в систему - вот это да, непредсказуемо.
                      еще поизучав тему пришел к такому выводу, что нужно получить алгоритм, который "упаковывает" 4ре октета в 3ри и позволяет однозначным преобразованием восстановить заданный

                      т е, задан IP = 109.3.250.4, получаем, например, IP = 10.253.0.177 и обратно из него можно получить заданный.
                      Если отбросить предметку по IP, то из 4рех чисел 0-255 получить 3ри числа 0-255 и иметь возможность восстановить из этих 3х исходные 4ри. Преобразование на побитовых операциях.

                      Какой алгоритм здесь можно применить? Подскажите как быть-то, буду оч.признателен
                        Цитата FasterHarder @
                        Какой алгоритм здесь можно применить?

                        Само собой никакой. Ибо чисто арифметически каждому "упакованному" значению будет соответствовать в среднем аж 256 различных исходных значений - ну и в какое из них распаковывать?
                        Сообщение отредактировано: Akina -
                          Akina, понял, спс, в принципе были мысли, что такое получить невозможно
                          а НАТ ведь умеет преобразовывать глоб.IP в приватные и наоборот
                            Цитата FasterHarder @
                            НАТ ведь умеет преобразовывать глоб.IP в приватные и наоборот

                            NAT-у проще. Он записывает сессии. А там как минимум пара адрес источника и адрес назначения. И плюс специфические для протокола данные, например, номера портов.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0726 ]   [ 18 queries used ]   [ Generated: 19.03.24, 04:44 GMT ]