karanlık proxyscrape logo

ipinfo.io ürününü kazanmak için ProxyScrape proxy'lerini nasıl kullandım

Ocak-05-20245 dakika okuma
Merhaba, ben Benji, bir ProxyScrape kullanıcısıyım ve sistemlerle uğraşmayı ve programların arka planda nasıl çalıştığını bulmayı seviyorum. Ayrıca biraz sunucu yönetimi ve ara sıra kodlama da yapıyorum(https://benji.link). ProxyScrape benden proxy'lerini ne için kullandığım hakkında biraz yazmamı istedi, işte başlıyoruz:
Cadılar Bayramı 2023 için ipinfo.io, kullanıcıların IP'leri ve GPS verilerini göndermek için IPinfo uygulamasını kullanmaları gereken "Cadılar Bayramı Avı" yarışmasını düzenledi. Sanırım onlar IP verilerini geliştirmek isterken, biz de bazı ürünler kazanma şansına sahip olduk.

İki hafta boyunca her gün, o günün ürünlerini kazanmak için başvurular arasından bir kullanıcı seçtiler. Bu şekilde tamamen bir sayı oyunu değildi ve biraz da şans vardı.

Yolculuğuma, muhtemelen amaçlandığı şekilde, sadece biraz otomasyonla başladım. Bunu, İSS'mden yeni bir mobil IP almaya zorlamak için telefonumda Uçak modunu açıp kapatmak için yavaş bir otomatik tıklama yaparak yaptım. Bu harika çalıştı, ancak çok yavaştı ve bana dakikada sadece 2-3 IP verdi.

Daha hızlı yollar düşünmeye başlamadan önce bu yöntemle telefonumla toplamda 400-500 civarında IP aldım.

O gün eve gittiğimde, sistemi kolayca aşmanın ve bunun için bir telefon kullanmak zorunda kalmadan proxy kullanmanın bir yolu olup olmadığını görmek için uygulamayı tersine mühendislik yapmaya başladım.

Uygulamadan gelen ağ trafiğini inceledikten sonra, gönderilen tek şeyin cihaz kimliğinizle birlikte json uç noktasına ("https://ipinfo.io/json") yapılan tek bir istek olduğunu fark ettim.


IPinfo uygulamasından geçen trafiği izleyen HTTP araç setinden ekran görüntüsü. (Cihaz Kimliği vurgulanmıştır)

İlk önce bu taleplerden birini kopyalayıp proxy kullanmayı denedim, ancak talepler kabul edilmiyordu. Biraz deneme yanılma yoluyla, bunun bir şekilde istekte gönderilen ekstra bilgilerle ilgili olduğunu fark ettim.

Cihaz kimliği ve uç nokta URL'si bu istekte önemli olan tek şeydi.

Diğer tüm ayrıntıları kaldırdıktan sonra, istekte yalnızca cihaz_id'si olacak ve başka hiçbir şey olmayacak şekilde çalışmaya başladı.

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

Cihaz kimliğini, uygulamayı yüklediğiniz herhangi bir telefondan kopyalayabilirsiniz ve muhtemelen uygulama olmadan benim için kimlik oluşturmasını sağlayacak bir şey yapabilirdim, ancak bu zahmete değmezdi.

Şimdi geriye kalan tek şey proxy kullanmaktı ki bu da işin kolay kısmıydı.

ProxyScrape konut proxy 'lerini kullanmaya karar verdim çünkü bir promosyondan bazı ücretsiz verilerim vardı ve binlerce benzersiz IP almamı sağladılar.

Bu şekilde 100 istek gönderen çok basit bir komut dosyası ile başladım:


Bu iyi çalıştı ve hızı dakikada yaklaşık 2-3 IP'den dakikada yaklaşık 30 IP'ye çıkardı. (Her istek 0,5-2 saniye arasında sürüyor).

Hızı daha da artırmak için, bu benim için hala yeterince hızlı olmadığından, istekleri eşzamanlı olarak göndermek için bazı basit iş parçacıkları uygulamak istedim.

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)

Her ihtimale karşı birkaç farklı cihaz kimliği ekledim ve ProxyScrapew'den proxies.txt dosyasına yapıştırılmış 10.000 adet 1 dakikalık dönen proxy listesi aldım. Ayrıca, her iş parçacığının başlatılması arasında kısa bir uyku süresi eklediğimden emin oldum, böylece hepsi aynı anda gerçekleşmez. (bu da sorunlara neden oluyor gibi görünüyordu).

Şimdi tek yapmam gereken "range(500)" içindeki sayıyı değiştirerek binlerce IP'nin sayılmasını sağlamaktı.

Tüm bu değişiklikler dakikada birkaç yüz IP almamı sağladı. Daha sonra 2 haftalık av boyunca her gün birkaç bin IP göndermeye devam ettim.

Etkinlik organizatörlerine göre 149 bin tekil IP almayı başardım, ancak çok daha fazlasını gönderdiğimden şüpheleniyorum. Bu beni dünya çapında 6. sıraya yerleştirdi ve bana bazı tatlı ürünler bıraktı.
Yarışma sonuçlarını buradan görebilirsiniz: https://community.ipinfo.io/t/the-great-ip-hunt-is-over/3906

Kendime bir çıkartma paketi, "Ben bir Huntathon Kazananıyım T-Shirt'ü", İnternet haritalı bir Not Kartı ve IPinfo çorapları aldım.

Bunların hepsi yaklaşık 3 hafta sonra geldi:

Bir feragatname olarak, IPinfo ekibi uygulamanın tersine mühendisliğe uğramasını bekliyordu ve aslında insanların blokların etrafında nasıl yaratıcı çözümler bulduklarını öğrenmekten oldukça mutluydu.
Sonuç olarak, yeni insanlarla tanışmak, proxy'ler ve Android tersine mühendislik hakkında bazı şeyler öğrenmek ve elbette bazı ücretsiz ürünler almak eğlenceli bir zamandı.

Benji