Загрузка...

Скрипт БЕСКОНЕЧНЫЕ запросы в Shodan. Авторег+автосмена API ключа. [Python]

Тема в разделе Python создана пользователем kiwe1578 28 мар 2025. 340 просмотров

  1. kiwe1578
    kiwe1578 Автор темы 28 мар 2025 ня („• ᴗ •„) 20 8 окт 2022
    Приветствую, уважаемые форумчане! Сегодня хотел бы рассмотреть тему использования большого кол-ва API ключей в Shodan для того чтобы избавится от лимита на запросы по одному ключу.
    Раз мы собираемся использовать много ключей, нам потребуется много аккаунтов.
    Код авторега:
    Python

    import random

    import pymailtm

    import requests

    import string

    import bs4


    mailtm = pymailtm.MailTm()


    account = mailtm.get_account()


    login = ''.join(random.choice(string.ascii_letters) for i in range(20))


    req = requests.get('https://account.shodan.io/register')

    cookie = req.headers['set-cookie']


    soup = bs4.BeautifulSoup(req.text, 'lxml')

    csrf = soup.select_one('input[name=csrf_token]')['value']


    print('CSRF Token received!')

    loginpass = login+':123123123'

    reg = requests.post('https://account.shodan.io/register',

    f"username={login}&password=123123123&password_confirm=123123123&email={account.address}&csrf_token={csrf}", headers={'Cookie':cookie})

    if 'Check your email inbox to activate the account!' in reg.text:

    print('Account registered!')

    print('Waiting for activation link...')

    message = account.wait_for_message()

    requests.get(message.text[25:])

    print('Activation successful!')

    print(loginpass)

    with open('accs.txt', 'a') as file:

    file.write(loginpass + '\n')


    else:

    print('Err!')
    Код при одном запуске регает один акк на временную почту, данные записывает в accs.txt. Код авторега не мой, нашел его на просторах интернета, наверное позже я сделаю доработаю его, сделаю поддержку ****** при запросах+добавлю генерацию большого кол-ва акков за раз.
    Затем надо будет со всех аккаунтов извлечь их API ключ, для этого используем джентельменский набор любого парсера, а именно requests, fake_headers, bs4. Извлекаем данные из файла accs.txt, по очереди входим в каждый аккаунт, перед этим создав сессию. Используя данные в сессии, с другой страницы забираем наш ключ, код записывает его в api.txt. Наверное даже ежику понятно что shodan такую активность не любит. С одного айпи мне удается забрать ключ с трех аккаунтов, дальше Shodan отправляет ip во временнный бан. Сколько длится бан - хз. Но я думаю вы догадываетесь как это решается, просто добавляем вагон и маленькую тележку ******.
    Код, достающий API ключ:
    Python
    import requests
    from bs4 import BeautifulSoup
    from fake_headers import Headers

    head = Headers()

    ACCS_FILE = "accs.txt"
    API_FILE = "api.txt"
    LOGIN_URL = "https://account.shodan.io/login"
    DASHBOARD_URL = "https://account.shodan.io"
    """
    Условия пользования Shodan запрещают использование мулти-акков для обхода ограничений на api,
    потому рекомендую использовать ******, к примеру тут стоит ****** от vless *** клиента nekobox
    """
    proxies = {
    "https":"127.0.0.1:2080"
    }

    def find_api(page):
    soup = BeautifulSoup(page, 'lxml')
    api_div = soup.find("div", class_="api-key")
    return api_div.text.strip()
    def main():
    with open(ACCS_FILE, "r") as file:
    accounts = [line.strip().split(":") for line in file.readlines()]
    with open(API_FILE, 'w') as api_file:
    for a in accounts: #a[0] - логин, a[1]-пароль
    session = requests.Session()
    headers=head.generate()
    response = session.get(LOGIN_URL, headers=headers, proxies=proxies)
    soup = BeautifulSoup(response.text, 'html.parser')
    csrfblock = soup.find("input", {'name':"csrf_token"})
    csrf = csrfblock['value'] if csrfblock else ''
    data = {
    'username': a[0],
    'password': a[1],
    'grant_type':'password',
    'continue':'https://www.shodan.io/dashboard',
    'csrf_token': csrf
    }
    session.post("https://account.shodan.io/login", headers=headers, data=data, proxies=proxies)
    response_api=session.get("https://account.shodan.io", headers=headers, proxies=proxies)
    api_key=find_api(response_api.text)
    if api_key:
    api_file.write(f"{api_key}\n")
    else:
    continue
    if __name__ == "__main__":
    main()
    Далее я написал модуль, в котором есть функция, возвращающая случайный ключ из api.txt
    Код с функцией, возвращающей случайный ключ:

    Python
    import random
    def get_key():
    with open("api.txt", 'r') as file:
    return random.choice(file.readlines())
    Вот пример использования:
    Python
    import shodan
    from get_key import get_key

    API_KEY = get_key() #достаем случайный ключ и делаем запрос

    api = shodan.Shodan(API_KEY)

    try:
    ip_info = api.host("1.1.1.1")

    print(f"IP: {ip_info['ip_str']}")
    print(f"Организация: {ip_info.get('org', 'Неизвестно')}")
    print(f"Страна: {ip_info.get('country_name', 'Неизвестно')}")
    print(f"Открытые порты: {ip_info['ports']}")

    except shodan.APIError as e:
    print(f"Ошибка API Shodan: {e}")
    Я не получил никаких проблем на маленьком количестве api которые у меня были, но идея брать каждый раз случайный ключ из файла мне не очень нравится. Я хотел написать код так чтобы он выдавал один и тот же ключ пока на нем не закончатся лимиты. То есть сначала выжимаем досуха один ключ и идем за другим, с точки зрения самого Shodan это более нормальное поведение, чем для каждого нового запроса с одного ip, брать новый ключ. Для того чтобы такое сделать, нужно было знать лимиты на бесплатном api, а я их в сети не нашел, считать, просто делая запросы очень долго, так как у API есть ограничение 1 запрос в секунду.
    Если у кого есть идеи как сделать функцию, выдающую ключ, более нормальной пишите, я буду очень рад если насоветует что-нибудь.
    На этом все, всем пока. :pepebye:
     
  2. kiwe1578
    kiwe1578 Автор темы 28 мар 2025 ня („• ᴗ •„) 20 8 окт 2022
  3. kiwe1578
    kiwe1578 Автор темы 28 мар 2025 ня („• ᴗ •„) 20 8 окт 2022
    Нашел оригинальную тему откуда взял авторег - тык
     
  4. usrnet
    usrnet 30 мар 2025 4 9 авг 2024
    слушай, а получттся сделать чекер аккаунтов шодан? чтоб выводил инфу о нем либо вытаскивал апи кей ключ, у меня 10к лог и пас шодан акков
     
    1. Палки
      usrnet, а почему нет, там нет никакой капчи, более того можно без проксей чекать - достаточно соблюдать рейт лимиты
Top
Загрузка...