Como usei o site ProxyScrape proxies para ganhar a mercadoria ipinfo.io

Jan-05-20245 minutos de leitura

Olá, sou Benji, um usuário do ProxyScrape , e adoro mexer nos sistemas e descobrir como os programas funcionam em segundo plano. Também faço administração de servidores e, ocasionalmente, codifico (https://benji.link). O ProxyScrape pediu que eu escrevesse um pouco sobre o uso que fiz do proxies , então vamos lá: No Halloween de 2023, o ipinfo.io realizou

Olá, sou Benji, um usuário do ProxyScrape , e adoro mexer nos sistemas e descobrir como os programas funcionam em segundo plano. Também faço administração de servidores e, ocasionalmente, codifico(https://benji.link). O ProxyScrape pediu que eu escrevesse um pouco sobre como utilizo o proxies , então vamos lá:

Para o Halloween de 2023, o ipinfo.io realizou o concurso "Halloween Hunt", no qual os usuários deveriam usar o aplicativo IPinfo para enviar IPs e dados de GPS. Acho que eles queriam melhorar seus dados de IP, enquanto nós tínhamos a chance de ganhar alguns produtos.

Todos os dias, durante duas semanas, eles escolheram um usuário entre os envios para ganhar o produto daquele dia. Dessa forma, não era um jogo de números completo e havia um pouco de sorte envolvida.

Comecei minha jornada da maneira que provavelmente foi planejada, apenas com alguma automação. Para isso, criei um lento auto-clicker para ligar/desligar o modo Avião no meu telefone para forçar um novo IP móvel do meu ISP. Isso funcionou muito bem, mas foi muito lento e só me forneceu cerca de 2 a 3 IPs por minuto.

Consegui cerca de 400 a 500 IPs no total com meu telefone usando esse método, antes de começar a pensar em maneiras mais rápidas.

Quando cheguei em casa naquele dia, comecei a fazer engenharia reversa do aplicativo para ver se havia alguma maneira de contornar o sistema e usar o proxies sem precisar usar um telefone para isso.

Depois de inspecionar o tráfego de rede do aplicativo, percebi que tudo o que estava sendo enviado era uma única solicitação para o endpoint json ("https://ipinfo.io/json"), com o ID do seu dispositivo.


Captura de tela do kit de ferramentas HTTP monitorando o tráfego que passa pelo aplicativo IPinfo. (ID do dispositivo destacado)

Primeiro, tentei apenas copiar uma dessas solicitações e usar o site proxies com ela, mas as solicitações não estavam sendo aceitas. Por meio de algumas tentativas e erros, percebi que, de alguma forma, o problema estava relacionado às informações extras enviadas na solicitação.

A ID do dispositivo e a URL do endpoint foram as únicas coisas importantes nessa solicitação.

Depois de remover todos os outros detalhes para que a solicitação tivesse apenas o device_id e nada mais, ela começou a funcionar.

url = "https://ipinfo.io/json?token=app_test"


headers = {
  'Host': 'ipinfo.io',
  'User-Agent': 'IPinfo/Android-Lib/3.0.6/IPinfo',
  'x-conn-details': 'device_id=d813353d28df2ad3'
}

A ID do dispositivo pode ser copiada de qualquer telefone em que você tenha instalado o aplicativo, e eu provavelmente poderia ter feito algo para gerar a ID para mim sem o aplicativo, mas não valeu a pena o incômodo.

Agora só faltava usar o site proxies, que foi a parte mais fácil.

Decidi usar o ProxyScrape residential proxies porque eu tinha alguns dados gratuitos de uma promoção e eles me permitiram obter milhares de IPs exclusivos.

Comecei com um script muito simples que enviava 100 solicitações como esta:


Isso funcionou bem e aumentou a velocidade de cerca de 2 a 3 IPs por minuto para cerca de 30 IPs por minuto (com cada solicitação levando entre 0,5 e 2 segundos).

Para aumentar ainda mais a velocidade, já que isso ainda não era rápido o suficiente para mim, eu queria implementar alguns threads simples para enviar as solicitações simultaneamente.

import requests
import concurrent.futures
import time
import random


# open the proxies.txt file and read the proxies
proxies = open("proxies.txt", "r").read().split("\n")


url = "https://ipinfo.io/json?token=app_test"


device_ids = {
  "3d8e0d7245a92152",
  "a9c7b2b233dd06b8",
  "661035895999a7fe",
  "d813353d28df2ad3",
  "982078c380f4fe38"
}


success_count = 0


def send_request(i):
  global success_count
  try:
    # pick a random number between 1 and 1000
    rand = random.randint(1, 10000)
    proxy = {"https": proxies[rand]}
    device_id = random.choice(list(device_ids))


    payload = {}
    headers = {
        'Host': 'ipinfo.io',
        'User-Agent': 'IPinfo/Android-Lib/3.0.6/IPinfo',
        'x-conn-details': 'device_id={}'.format(device_id)
    }


    response = requests.request("GET", url, headers=headers, data=payload, proxies=proxy, timeout=20)
    print("Request #{}: \n{} \nTime taken: {}\n".format(i, response.text, response.elapsed.total_seconds()))
    success_count += 1
  except Exception as e:
    print("Request #{}: Error - {}".format(i, str(e)))


with concurrent.futures.ThreadPoolExecutor() as executor:
  futures = []
  for i in range(500):
    time.sleep(0.02)  # wait for 100ms before starting each thread
    futures.append(executor.submit(send_request, i))


  try:
    for future in concurrent.futures.as_completed(futures):
      future.result()
  except KeyboardInterrupt:
    print("Program interrupted by user.")
    for future in futures:
      future.cancel()
  except Exception as e:
    print("An error occurred:", str(e))


print("Success count:", success_count)

Adicionei algumas IDs de dispositivos diferentes por precaução e obtive uma lista de 10.000 proxies rotativos de 1 minuto do ProxyScrape, que foram colados em proxies.txt. Também me certifiquei de adicionar um curto período de tempo de espera entre o início de cada thread para que nem todos acontecessem exatamente ao mesmo tempo. (o que parecia causar problemas).

Agora, tudo o que eu precisava fazer era alterar o número no "range(500)" para obter a contagem de milhares de IPs.

Todas essas alterações me permitiram obter algumas centenas de IPs por minuto. Em seguida, continuei a enviar alguns milhares de IPs todos os dias durante as duas semanas de caça.

De acordo com os organizadores do evento, consegui obter 149 mil IPs exclusivos, embora eu suspeite que tenha enviado muito mais. Isso me colocou em sexto lugar em todo o mundo e me deixou com alguns produtos incríveis.
Você pode ver os resultados do concurso aqui: https://community.ipinfo.io/t/the-great-ip-hunt-is-over/3906

Comprei um pacote de adesivos, uma camiseta "I am a Huntathon Winner T-Shirt", um notecard com um mapa da Internet e algumas meias IPinfo.

Todos eles chegaram cerca de três semanas depois:

Como isenção de responsabilidade, a equipe do IPinfo esperava que o aplicativo fosse submetido à engenharia reversa e, na verdade, ficou muito feliz em saber como as pessoas encontraram soluções criativas para contornar os bloqueios.

No final, foi divertido conhecer novas pessoas, aprender algumas coisas sobre proxies e engenharia reversa do Android e, é claro, receber alguns produtos gratuitos.

Benji