"PHP" / Говнокод #28902 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 Myxa, (Updated )

Комментарии (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 для каждого сервера.

    Как РКН выбирает адреса для блокировки?
    Ответить
  • Петухи, что рекомендуете почитать про AWS, Fastly и Edgecast CDN? Интересуют способы добычи их IP-адресов.
    Ответить
      • Как вытащить диапазон айпишников, принадлежащих какой-нибудь компании, понятно.

        Интересна более тонкая задача: вытащить все айпишники, принадлежащие определённому сервису, и понять, какой для чего. В опубликованном говнокоде я начал вытаскивать айпишники для определённых сервисов Ф-ка и И-ма (для глагне, для конь-тента, для АПИ, для уёб-носков). Подозреваю, что айпишников больше, чем 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 старших битов, чтобы спалить своего интернет-провайдера, но не спалить себя.
                    Ответить
    • А я вот — давай я здесь насру, и они все прилетят сюда, и мы их убьём!..
      Ответить
  • И нахуй ты здесь на этом нахрюке пишешь?
    Ответить
    • написал тебе за щеку, проверяй
      Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8