• XSS.stack #1 – первый литературный журнал от юзеров форума

Парсинг. Обход Cloudflare

_Gasol_

RAID-массив
Пользователь
Регистрация
05.10.2019
Сообщения
75
Реакции
177
Python:
from requests_html import HTMLSession

session = HTMLSession()
session.proxies = { 'http':  'socks5h://<proxy>', 'https': 'socks5h://<proxy>'  }
session.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0' }

request = session.get(<url>)
session.close()

request.html.render() # драйвер для JS

request.html.html #Получаем контент)
 
Последнее редактирование:
- Сильно, бл#ть. Что делает render?
- Вызывает хедлес хром через папитер и сует ему контент от raw-реквеста.
- Ты это проверял? Оно обойдет обвязку и даст тебе куку? Дальше мы raw-реквестами можем пользоваться?
- <you_answer_here>
 
render берет текст, который отображается с помощью JS. Я это юзаю. Прекрасно паршу сайт за Cloudflare.
- Сильно, бл#ть. Что делает render?
- Вызывает хедлес хром через папитер и сует ему контент от raw-реквеста.
- Ты это проверял? Оно обойдет обвязку и даст тебе куку? Дальше мы raw-реквестами можем пользоваться?
- <you_answer_here>
 
Подтягивает папитер для работы с хромиумом. Извлекает текст, который отображается с помощью javascript. И да, работает как браузер.

ОКей. Объясни плиз такую вещь, вот после вызова рендера, он начинает работать как браузер или посылает raw-запросы?
 
Я пользовался python модулем cfscrape.


Код:
import cfscrape

scraper = cfscrape.create_scraper()  # returns a CloudflareScraper instance
# Or: scraper = cfscrape.CloudflareScraper()  # CloudflareScraper inherits from requests.Session
print scraper.get("http://somesite.com").content  # => "<!DOCTYPE html><html><head>..."
 
Да, я юзал его. Но уже чот не получалось с новыми патчами Cloudflare.

Я пользовался python модулем cfscrape.


Код:
import cfscrape

scraper = cfscrape.create_scraper()  # returns a CloudflareScraper instance
# Or: scraper = cfscrape.CloudflareScraper()  # CloudflareScraper inherits from requests.Session
print scraper.get("http://somesite.com").content  # => "<!DOCTYPE html><html><head>..."
 
Я вот так обходил, не знаю как там сейчас с cf
Python:
    def math_slove(self, slove):
        res = 0
        for i in slove:
            if i == '1':
                res = res + 1
        return res

    def solve_challenge(self, challenge):
        rand_words = re.search(r's,t,o,p,b,r,e,a,k,i,n,g,f, ([^\=]*)\=\{\"([^\"]*)', challenge)
        rnd1, rand2 = rand_words.group(1), rand_words.group(2)
        sings = re.findall('{}.{}([\*\-\+])'.format(rnd1,rand2), challenge)
        brackets = re.findall(rnd1 + '\=\{\"'+rand2+'\"\:([\[\]\(\)\!\+]*)\}\;', challenge)
        brackets += re.findall('{}.{}[\W]=([\[\]\(\)\!\+]*)'.format(rnd1,rand2), challenge)
        numbers = []
        for i in brackets:
            i = i.replace('!![]','1')
            i = i.replace('![]','-1')
            i = i.replace('!+[]','1')
            i = i.replace('!!+[]','-1')
            i = i.replace('+[]','+0')
            i = i.split(')+(')
            res = ''
            res_int = 0
            for j in i:
                j = j.replace('(', '')
                j = j.replace(')', '')
                try:
                    res = res + str(self.math_slove(j))
                except SyntaxError:
                    return None
            numbers.append(res)
        for i in range(len(numbers)):
            if i == 0:
                res = int(numbers[i])
            else:
                if sings[i-1] == '+':
                    res = res + int(numbers[i])
                if sings[i-1] == '*':
                    res = res * int(numbers[i])
                if sings[i-1] == '-':
                    res = res - int(numbers[i])
        return res

    def cloudflare_bypass(self, r):
        body = r.text
        scheme = re.search(r'^([\w]*)', r.url).group(1)
        domain = re.search(r'\/\/([^\/]*)', r.url).group(1)
        submit_url = '{}://{}/cdn-cgi/l/chk_jschl'.format(scheme, domain)
        jschl_vc = re.search(r'name="jschl_vc" value="(\w+)"', body).group(1)
        pas = re.search(r'name="pass" value="(.+?)"', body).group(1)
        jschl_answer = str(self.solve_challenge(body) + len(domain))
        time.sleep(5)
        return '{0}?jschl_vc={1}&pass={2}&jschl_answer={3}'.format(submit_url, jschl_vc, pas, jschl_answer)
 
Да иногда не сам CloudFlare проблемы создает, а софт ждёт какого то специального хедера. Над одном сайте капался пару недель, пока нашел, что нужен хедер с символами из куки. Но это другая история. Спасибо за код...про cfscrape тоже незнал.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
cfscrape так можно через pip поставить, что в свою очередь упрощает задачу
pip install cfscrape
и смысл? либа для обхода андератак мода. ЛИБА, НО НЕ ГОТОВЫЙ СКРИПТ. есть большое кол-во готовых скриптов, которые обходят кф и находят реал айпи ?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
может тогда возьмете на заметку, что есть не ток cfscrape, но и cloudscraper? разница не большая, но возьмите на заметку ;)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В питоне не особо шарю

Python:
request = session.get(github.com)
NameError: name 'github' is not defined

Что делаю не так? Нужно срочно узнать реальный ip сайта.

пс.
гитхаб брал для примера.
 
В питоне не особо шарю
Просто тут дело даже не в пайтоне. Даже те, кто ни разу на нем не писал, но писал хоть на каком то яп - найдут ошибку;)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
В питоне не особо шарю

Python:
request = session.get(github.com)
NameError: name 'github' is not defined

Что делаю не так? Нужно срочно узнать реальный ip сайта.

пс.
гитхаб брал для примера.
кавычки
 
Да иногда не сам CloudFlare проблемы создает, а софт ждёт какого то специального хедера. Над одном сайте капался пару недель, пока нашел, что нужен хедер с символами из куки. Но это другая история. Спасибо за код...про cfscrape тоже незнал.
Если у Клоуда настроен только редирект после 5 секунд, а не проверка на валидность хедеров и тд, то cfscrape рил помогает. А так проверки на браузер щас обхожу с селениумом и с правильными хедерами вместе с CF куками.
 
свежая методика

Скрытый контент для зарегистрированных пользователей.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх