Comment j'ai utilisé ProxyScrape proxys pour gagner des marchandises ipinfo.io

Jan-19-20245 minutes de lecture

Bonjour, je suis Benji, un utilisateur de ProxyScrape , et j'adore jouer avec les systèmes et découvrir comment les programmes fonctionnent en arrière-plan. Je fais aussi un peu d'administration de serveur et occasionnellement du codage (https://benji.link). ProxyScrape m'a demandé d'écrire un peu sur ce que j'ai fait de leur proxys , alors c'est parti : Pour Halloween 2023, ipinfo.io a organisé

Bonjour, je suis Benji, un utilisateur de ProxyScrape , et j'adore jouer avec les systèmes et découvrir comment les programmes fonctionnent en arrière-plan. Je fais également de l'administration de serveur et du codage occasionnel(https://benji.link). ProxyScrape m'a demandé d'écrire un peu sur ce que j'ai fait de leur proxys , alors c'est parti :

Pour Halloween 2023, ipinfo.io a organisé le concours "Halloween Hunt", où les utilisateurs étaient censés utiliser l'application IPinfo pour soumettre des IP et des données GPS. Je suppose qu'ils voulaient améliorer leurs données IP, tandis que nous avions la chance de gagner des produits dérivés.

Chaque jour, pendant deux semaines, ils ont choisi un utilisateur parmi les soumissions pour gagner la marchandise du jour. De cette manière, il ne s'agissait pas d'un jeu de chiffres mais d'une part de chance.

J'ai commencé mon voyage, de la manière dont il était probablement prévu, juste avec un peu d'automatisation. J'ai fait cela en créant un auto-clicker lent pour activer/désactiver le mode Avion sur mon téléphone afin de forcer une nouvelle IP mobile à partir de mon FAI. Cela a très bien fonctionné, mais c'était très lent et je n'ai obtenu que 2 à 3 IP par minute.

J'ai obtenu environ 400-500 adresses IP au total avec mon téléphone grâce à cette méthode, avant de commencer à penser à des moyens plus rapides.

Une fois rentré chez moi ce jour-là, j'ai commencé à faire de la rétro-ingénierie sur l'application pour voir s'il y avait un moyen de contourner facilement le système et d'utiliser proxys sans avoir à utiliser un téléphone.

Après avoir inspecté le trafic réseau de l'application, j'ai remarqué que tout ce qui était envoyé était une requête unique vers le point de terminaison json ("https://ipinfo.io/json"), avec l'identifiant de votre appareil.


Capture d'écran de la boîte à outils HTTP surveillant le trafic passant par l'application IPinfo. (ID de l'appareil en surbrillance)

J'ai d'abord essayé de copier l'une de ces demandes et d'utiliser proxys , mais les demandes n'étaient pas acceptées. Après quelques essais et erreurs, j'ai remarqué que le problème était lié aux informations supplémentaires envoyées dans la demande.

L'identifiant de l'appareil et l'URL du point final sont les seuls éléments importants de cette demande.

Après avoir supprimé tous les autres détails afin que la demande ne contienne que l'identifiant de l'appareil et rien d'autre, le système a commencé à fonctionner.

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'
}

L'identifiant de l'appareil peut être copié à partir de n'importe quel téléphone sur lequel vous avez installé l'application, et j'aurais probablement pu faire quelque chose pour qu'il génère l'identifiant pour moi sans l'application, mais cela ne valait pas la peine de s'embêter.

Il ne restait plus qu'à utiliser proxys, ce qui était la partie la plus facile.

J'ai décidé d'utiliser ProxyScrape residential proxys parce que j'avais des données gratuites provenant d'une promotion et qu'elles me permettaient d'obtenir des milliers d'adresses IP uniques.

J'ai commencé par un script très simple qui envoyait 100 requêtes de ce type :


Cela a bien fonctionné et a permis d'augmenter la vitesse d'environ 2-3 IP par minute à environ 30 IP par minute (chaque requête prenant entre 0,5 et 2 secondes).

Pour augmenter encore la vitesse, puisque ce n'était pas encore assez rapide pour moi, j'ai voulu implémenter un simple threading pour envoyer les requêtes simultanément.

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)

J'ai ajouté quelques ID d'appareils différents au cas où, et j'ai obtenu de ProxyScrape une liste de 10 000 proxys en rotation d'une minute, que j'ai collée dans proxys.txt. J'ai également veillé à ajouter un court temps de sommeil entre le démarrage de chaque thread afin que tous les threads ne se produisent pas exactement au même moment (ce qui semble poser problème). (ce qui semble poser des problèmes).

Il ne me restait plus qu'à modifier le nombre dans la "plage(500)" pour comptabiliser des milliers d'adresses IP.

Tous ces changements m'ont permis d'obtenir quelques centaines d'adresses IP par minute. J'ai ensuite continué à envoyer quelques milliers d'adresses IP chaque jour pendant les deux semaines qu'a duré la chasse.

Selon les organisateurs de l'événement, j'ai réussi à obtenir 149k IP uniques, bien que je soupçonne que j'en ai envoyé beaucoup plus. Cela m'a placé à la 6e place mondiale et m'a permis de remporter quelques produits dérivés.
Vous pouvez consulter les résultats du concours ici : https://community.ipinfo.io/t/the-great-ip-hunt-is-over/3906

J'ai reçu un paquet d'autocollants, un t-shirt "I am a Huntathon Winner", une carte de notes avec une carte de l'internet et des chaussettes IPinfo.

Ils sont tous arrivés environ 3 semaines plus tard :

L'équipe d'IPinfo s'attendait à ce que l'application fasse l'objet d'une rétro-ingénierie, mais elle a été très heureuse d'apprendre que des personnes avaient trouvé des solutions créatives pour contourner les blocages.

En fin de compte, c'était un moment agréable de rencontrer de nouvelles personnes, d'apprendre des choses sur proxys et sur l'ingénierie inverse d'Android, et bien sûr, de recevoir des marchandises gratuites.

Benji