1. PHP / Говнокод #28902

    0

    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
    27. 27
    <?php
    
    $domains = [
    'edge-star-shv-%s-%s.facebook.com',      /* edge-chat.facebook.com, graph.facebook.com, mbasic.facebook.com, touch.facebook.com */ 
    'instagram-p42-shv-%s-%s.fbcdn.net',     /* www.instagram.com, b.i.instagram.com */
    'edge-sonar-mini-shv-%s-%s.fbcdn.net',   /* не знаю, для чего нужны edge-sonar-mini */
    'edge-star-mini-shv-%s-%s.facebook.com', /* www.facebook.com, m.facebook.com, fb.com */
    'instagram-p3-shv-%s-%s.fbcdn.net',      /* api.instagram.com, i.instagram.com, l.instagram.com, graph.instagram.com, edge-chat.instagram.com, */
                                             /* static.cdninstagram.com, scontent-hel3-1.cdninstagram.com, scontent.cdninstagram.com, */
                                             /* threads.net, www.threads.net */
    'xx-fbcdn-shv-%s-%s.fbcdn.net',          /* scontent-hel3-1.xx.fbcdn.net, static.xx.fbcdn.net, connect.facebook.net, scontent.xx.fbcdn.net */
    'edge-dgw-shv-%s-%s.facebook.com'        /* gateway.facebook.com, gateway.instagram.com, gateway.threads.net */
    ];
    
    $suffices = explode(',', 'akl1,ams2,ams4,arn2,atl3,bcn1,bkk1,bog1,bog2,bom1,bom2,bos5,bru2,ccu1,cdg4,cgk1,cph2,cpt1,del1,del2,den2,den4,dfw5,dub4,dus1,eze1,fco2,for1,fra3,fra5,gig4,gru1,gru2,ham3,hel3,hkg1,hkg4,hou1,hyd1,iad3,jnb1,jnb2,kul2,kul3,lax3,lga3,lhr6,lhr8,lim1,lis1,los2,maa2,mad1,mad2,man2,mct1,mia3,mnl1,mrs2,msp1,muc2,mxp1,mxp2,nrt1,ord5,otp1,pmo1,pnq1,prg1,qro1,scl2,sea1,sin6,sjc3,sof1,syd2,tpe1,vie1,waw1,xsp1,zrh1');
    
    foreach ($domains as $domain) {
      foreach (['01','02','03','04'] as $index) {
        foreach ($suffices as $suffix) {
            $url = sprintf($domain, $index, $suffix);
            $raw = gethostbynamel($url);
            if(!is_array($raw)) continue;
            $ips = implode(',', $raw);
            echo $ips,' ', $url, PHP_EOL;
        }
      }
    }

    Получение списка IP-адресов, используемых сервисами Ф*к, И*м и Threads.

    Запостил: Myxa, 13 Января 2024

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

    • SEO-псто.

      Удалось выжать по 120 IP-адресов для каждого сервера. Из них РКН заблокировал ничтожную часть:

      edge-star-shv: 157.240.205.1
      instagram-p42-shv: 31.13.72.174, 157.240.205.174, 157.240.236.174, 157.240.195.174.
      edge-star-mini-shv: 157.240.205.35
      instagram-p3-shv: 157.240.205.63
      xx-fbcdn-shv: 163.70.148.22, 157.240.205.11.
      edge-dgw-shv: 31.13.82.8, 157.240.31.10.

      То есть заблокировано всего 1-4 адреса из 120 для каждого сервера.

      Как РКН выбирает адреса для блокировки?
      Ответить
    • Откуда я взял суффиксы akl1, ams2,..., zrh1?

      Часть взял отсюда: https://www.cloudping.cloud/cloudfront-edge-locations.json
      Остальные — пришлось применить чёрную магию.
      Ответить
      • Ссылка в копилку:

        https://www.feitsui.com/en/article/3
        Ответить
    • Петухи, что рекомендуете почитать про AWS, Fastly и Edgecast CDN? Интересуют способы добычи их IP-адресов.
      Ответить
      • AS вытащи, да и всё
        Ответить
        • Как вытащить диапазон айпишников, принадлежащих какой-нибудь компании, понятно.

          Интересна более тонкая задача: вытащить все айпишники, принадлежащие определённому сервису, и понять, какой для чего. В опубликованном говнокоде я начал вытаскивать айпишники для определённых сервисов Ф-ка и И-ма (для глагне, для конь-тента, для АПИ, для уёб-носков). Подозреваю, что айпишников больше, чем 120 на сервис (сначала я разведал около 20, потом 32, потом 64, теперь вот 120).
          Ответить
          • Как я начал разведку? Узнал, что в разных географических регионах И-м возвращает разные айпишники для своего домена. Если рекурсивный резолвер поддерживает EDNS, то он палит твой айпишник следующим резолверам, они узнают твоего провайдера и возвращают персонифицированный ответ. Итого, EDNS:
            1. Нарушает приватность, сливая твой айпишник по цепочке.
            2. Нарушает целостность интернетов, возвращая разным клиентам разные ответы.

            Итак,
            www . instagram . com IN CNAME geo-p42.instagram.com
            geo-p42.instagram.com CNAME z-p42-instagram.c10r.instagram.com

            А вот z-p42-instagram.c10r.instagram.com возвращает ответ в зависимости от региона. Опросил его через разные публичные резолверы без EDNS, чтобы они выдали ответ в зависимости от своего нахождения, а не моего. У собранных айпишников посмотрел обратную зону (PTR) и нашёл все эти instagram-p3-shv-*. Добавил к ним суффиксов из cloudfront-edge-locations.json и нашёл ещё кучу айпишников.
            Ответить
            • Полученные айпишники пропинговал. Понял, что РКН в первую очередь блокирует айпишники, обнаруживаемые популярными DNS: Google (8.8.8.8), Cloudflare (1.1.1.1), Яндекс-ДНС, OpenDNS, а про другие публичные резолверы не знает.
              Ответить
              • То-есть подними VPN в Молдове, подыми там bind, выдавай его в качестве DNS при подключении кллиента, и теки
                Ответить
            • >EDNS
              обожемой, надо почитать rfc6891, я и не знал про такое. Как много воды утекло со времен чтения книжки с крабом (или с кузнечиком)

              >2. Нарушает целостность интернетов, возвращая разным клиентам разные ответы.

              Такая хуйня работала миллиарды лет уже. Чаще всего DNS сервер у питуха свой: или у его провайдера, или у его роутера, и потому чаще всего ты можешь вернуть адрес ближайший к петуху. Это сломалось с массовым завозом 1.1.1.1 и 8.8.8.8. Теперь помочь питуху может только anycast (когда один и тот же IP доступен из разных AS) но такое вроде можно делать олько для корневых DNS, остальным нельзя
              Ответить
              • Я сам не разобрался, как это реализовано. Гугли ECS = EDNS Client Subnet.

                Через эту питушню некоторые CDN работают, выбирая ближайшее к тебе зеркало ещё на этапе запроса к DNS, т. е. ещё задолго до HTTP-запроса.

                Вот вроде оно:

                https://datatracker.ietf.org/doc/html/rfc7871
                Ответить
                • This protocol uses an EDNS0 [RFC6891] option to include client
                     address information in DNS messages.  The option is structured as
                     follows:
                  
                                  +0 (MSB)                            +1 (LSB)
                        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                     0: |                          OPTION-CODE                          |
                        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                     2: |                         OPTION-LENGTH                         |
                        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                     4: |                            FAMILY                             |
                        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                     6: |     SOURCE PREFIX-LENGTH      |     SCOPE PREFIX-LENGTH       |
                        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                     8: |                           ADDRESS...                          /
                        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
                  
                     o  (Defined in [RFC6891]) OPTION-CODE, 2 octets, for ECS is 8 (0x00
                        0x08).
                  
                     o  (Defined in [RFC6891]) OPTION-LENGTH, 2 octets, contains the
                        length of the payload (everything after OPTION-LENGTH) in octets.
                  
                     o  FAMILY, 2 octets, indicates the family of the address contained in
                        the option, using address family codes as assigned by IANA in
                        Address Family Numbers [Address_Family_Numbers]
                  Ответить
                  • The format of the address part depends on the value of FAMILY.  This
                       document only defines the format for FAMILY 1 (IPv4) and FAMILY 2
                       (IPv6), which are as follows:
                    
                       o  SOURCE PREFIX-LENGTH, an unsigned octet representing the leftmost
                          number of significant bits of ADDRESS to be used for the lookup.
                          In responses, it mirrors the same value as in the queries.
                    
                        o  SCOPE PREFIX-LENGTH, an unsigned octet representing the leftmost
                          number of significant bits of ADDRESS that the response covers.
                          In queries, it MUST be set to 0.
                    
                       o  ADDRESS, variable number of octets, contains either an IPv4 or
                          IPv6 address, depending on FAMILY, which MUST be truncated to the
                          number of bits indicated by the SOURCE PREFIX-LENGTH field,
                          padding with 0 bits to pad to the end of the last octet needed.
                    
                       o  A server receiving an ECS option that uses either too few or too
                          many ADDRESS octets, or that has non-zero ADDRESS bits set beyond
                          SOURCE PREFIX-LENGTH, SHOULD return FORMERR to reject the packet,
                          as a signal to the software developer making the request to fix
                          their implementation.
                    
                       All fields are in network byte order ("big-endian", per [RFC1700],
                       Data Notation).
                    Ответить
                    • Т. е. ты можешь в запросе передавать не весь свой адрес целиком, а только N старших битов, чтобы спалить своего интернет-провайдера, но не спалить себя.
                      Ответить
                      • P.S. О существовании ECS я узнал здеся:

                        https://quad9.net/service/service-addresses-and-features#ecssec

                        https://quad9.net/support/faq/#edns

                        Надо наговнокодить клиента с ECS, чтобы понять, можно ли надурить резолверы, скормив им айпишник другой географической зоны.
                        Ответить
      • их до кучи...
        Ответить
      • Звали её по-мушиному: Лидия
        https://ip-ranges.amazonaws.com/ip-ranges.json
        Ответить
    • Ну вот, уже и мухи слетаются.
      Ответить
      • А я вот — давай я здесь насру, и они все прилетят сюда, и мы их убьём!..
        Ответить
    • И нахуй ты здесь на этом нахрюке пишешь?
      Ответить

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