1. C# / Говнокод #3381

    +112

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    static void Main(string[] args)
            {
                IPEndPoint myIP = null;
                TcpListener server = null;
                bool loop = true;
                while (loop)
                {
                    try
                    {
                        Random rnd = new Random(DateTime.Now.Millisecond);
                        new IPEndPoint(new IPAddress(new byte[] { 127, 0, 0, 1 }), rnd.Next(1000, 9999));
                        server = new TcpListener(myIP);
                        loop = false;
                    }
                    catch
                    {
                        loop = true;
                    }
                }
               //...
    }

    Подключаемся к серверу =)

    Запостил: psina-from-ua, 02 Июня 2010

    Комментарии (20) RSS

    • Ой-ой-ой!!! Создаем сервер, а не подключаемся.
      Ответить
    • больному имбицилу следует знать, что:
      1) создавать сервер на 127.0.0.1 глупо
      2) за хардкод айпи админ выбивает глаз
      3) за слуханье портов младше 1024 без разрешения IANA админ отрезает ухо
      4) вообще убей себя об стену
      Ответить
    • Да всего-то надо переписать шестую строчку:

      while(true) //loop!

      :)
      Ответить
    • На Украине система клиент-банк работает по сходному принципу... открывает диапазон портов. а при запросе клиента, сканирует клиентскую сеть на свободный порт в определенном диапазоне чтоб подключиться, и подключается к рандомному порту. Надо ли говорить, что защита от сетевых атак Оутпоста укладывает, по меньшей мере, возможность связи с банком.
      Ответить
      • И какой смысл в этих плясках с подключениями?
        Ответить
        • Ну, как я понимаю, таким образом пытались исключить возможность использования уже занятого порта. Такой метод применялся программой начала 2000-х годов. Может быть, в новых версиях это работает как-то по другому, но многие компании используют очень старые версии, так как они подвязаны к 1C. Это превращается в головную боль для администраторов, которые вынуждены отслеживать кто с какого адреса сканирует сеть.
          Ответить
          • Да гон это! Не буду, конечно, авторитетно заявлять, с цитатами из МСДН, но вот например если мы работаем с сокетом, то:

            1) Мы можем создать один TCP сокет на нужном порту (номер которого задается в конфигурации). Если порт занят - НЕ НУЖНО РАЗРУЛИВАТЬ ЭТО ДЕЛО АВТОМАТОМ - НУЖНО ПРОСТО СООБЩИТЬ ОБ ЭТОМ ЮЗВЕРЮ. пусть у него голова болит насчет номера порта.
            2) Мы его переводим в режим слушателя.
            3) Как только слушатель зафиксирует коннект - проверяем всякие проверки и одобряем коннект. При этом создаем новый лисерен на этом порту.
            Вот и все премудрости.
            Ответить
            • 1. Я не писал, что метод применялся на С#. Скорее всего, там был Delphi, и, быть может, используемые компоненты не позволяли задать порты автоматом.
              2. Перечитайте еще раз мои сообщения. Алгоритм не столь тривиален, как Вы его поняли. Порт выбирается не только со стороны клиента, но и со стороны сервера. Если быть точнее, клиент становится сервером для каких-то целей. Зачем - не знаю - доступа к исходникам системы клиен-банк у меня небыло.
              3. Если Вы посмотрите MSDN для Framework 1.0 и 4.0 - сильно удивитесь. За последние 10 лет он сильно эволюционировал, и соответственно, то что раньше было невозможно, сейчас естественно. Однако, как знать для какой версии фреймворка это все пишется?
              4. Вы представляете себе, что будет когда клиент-банк скажет бухгалтеру что порт занят, и предложит ввести любой доступный порт? Умножьте это на количество подключений в день.
              Ответить
    • причем если не ошибаюсь каждая итерация виснет где то на секунду?
      Ответить
    • Да че за херня с отрезанием уха? А если я пишу, к примеру,SMTP сервер на сышагпе, то полюбасу лисенер у меня будет слушать 25 порт. И не один лисенер, а сколько нужно. Есть ведь стандартное поведение!
      Ответить
      • Не знаю, как в винде (но если там есть файл hosts, то, может, и services есть), но слушать стоит не 25, а тот, который называется smtp.
        И админ доволен, и ухо не теряем!
        Ответить
        • Есть в винде hosts - это атавизм, в котором находится сопоставление IP адресов именам хостов. Но, согласно маппингу портов IANA, 25 порт - это и есть SMTP (110 - POP3, 80 - HTTP и т.д.) И если одмин по неуважительной причине этот маппинг не соблюдает - ему нужно отрезать то, что деду снесла курочка Ряба.
          Ответить
    • Ущипните меня! Цикл будет БЕСКОНЕЧНЫМ! Потому что endpoint, передаваемый как аргумент, всегда будет равен null, и, как следствие - ексепшн и новая итерация. И так до второго явления Христа народу!
      Ответить
      • Ну может код написан до первого явления... :D
        Ответить
      • Ну очевидно, что программист собирался написать:
        myIP = new IPEndPoint(new IPAddress(new byte[] { 127, 0, 0, 1 }), rnd.Next(1000, 9999));
        Таких опечаток можно встретить в любой программе море. Внимательно смотрим на сообщения компилятора о неиспользуемой переменной.
        Ответить

    Добавить комментарий