Tôi đã sử dụng như thế nào ProxyScrape proxy để giành được hàng hóa ipinfo.io

19-01-20245 phút đọc

Xin chào, tôi là Benji, một ProxyScrape người dùng, và tôi thích mày mò với các hệ thống và tìm hiểu cách các chương trình hoạt động ở chế độ nền. Tôi cũng thực hiện một số công việc quản trị máy chủ và thỉnh thoảng viết mã (https://benji.link). ProxyScrape yêu cầu tôi viết một chút về mục đích sử dụng proxy của họ, vậy thì chúng ta bắt đầu thôi: Vào lễ Halloween năm 2023, ipinfo.io đã tổ chức

Này, tôi là Benji, một ProxyScrape người dùng, và tôi thích mày mò với các hệ thống và tìm hiểu cách các chương trình hoạt động ở chế độ nền. Tôi cũng thực hiện một số công việc quản trị máy chủ và đôi khi là viết mã ( https://benji.link ). ProxyScrape yêu cầu tôi viết một chút về mục đích tôi sử dụng proxy của họ, vậy thì chúng ta hãy bắt đầu:

Vào dịp Halloween 2023, ipinfo.io đã tổ chức cuộc thi “Halloween Hunt” , trong đó người dùng được yêu cầu sử dụng ứng dụng IPinfo để gửi dữ liệu IP và GPS. Tôi đoán là họ muốn cải thiện dữ liệu IP của mình, trong khi chúng tôi có cơ hội giành được một số sản phẩm lưu niệm.

Mỗi ngày trong 2 tuần, họ chọn một người dùng từ các bài dự thi để giành được sản phẩm lưu niệm của ngày hôm đó. Theo cách đó, đây không phải là một trò chơi hoàn toàn dựa trên con số và có một chút may mắn.

Tôi bắt đầu hành trình của mình, theo cách có lẽ là dự định, chỉ với một số tự động hóa. Tôi đã làm điều này bằng cách tạo một trình nhấp tự động chậm để bật/tắt chế độ Máy bay trên điện thoại của tôi để buộc một IP di động mới từ ISP của tôi. Điều này hoạt động tốt, nhưng rất chậm và chỉ cung cấp cho tôi khoảng 2-3 IP mỗi phút.

Tôi đã lấy được tổng cộng khoảng 400-500 IP bằng phương pháp đó trên điện thoại trước khi tôi bắt đầu nghĩ đến những cách nhanh hơn.

Khi về nhà ngày hôm đó, tôi bắt đầu tiến hành phân tích ngược ứng dụng để xem liệu có cách nào tôi có thể dễ dàng vượt qua hệ thống và sử dụng proxy mà không cần dùng đến điện thoại hay không.

Sau khi kiểm tra lưu lượng mạng từ ứng dụng, tôi nhận thấy rằng tất cả những gì được gửi chỉ là một yêu cầu duy nhất đến điểm cuối json (“https://ipinfo.io/json”), với ID thiết bị của bạn.


Ảnh chụp màn hình từ bộ công cụ HTTP theo dõi lưu lượng truy cập đi qua ứng dụng IPinfo. (ID thiết bị được tô sáng)

Đầu tiên tôi thử chỉ sao chép một trong những yêu cầu đó và sử dụng proxy với nó, nhưng các yêu cầu không được chấp nhận. Qua một số lần thử và sai, tôi nhận thấy rằng bằng cách nào đó nó liên quan đến thông tin bổ sung được gửi trong yêu cầu.

ID thiết bị và URL điểm cuối là những thông tin quan trọng duy nhất trong yêu cầu đó.

Sau khi xóa tất cả các chi tiết khác để yêu cầu chỉ có device_id và không có gì khác, nó bắt đầu hoạt động.

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

Bạn có thể sao chép ID thiết bị từ bất kỳ điện thoại nào đã cài đặt ứng dụng và tôi có thể làm gì đó để ứng dụng tự tạo ID cho tôi mà không cần ứng dụng, nhưng điều đó không đáng để bận tâm.

Bây giờ việc duy nhất cần làm là sử dụng proxy, đây là phần dễ nhất.

Tôi quyết định sử dụng proxy dân dụng ProxyScrape vì tôi có một số dữ liệu miễn phí từ chương trình khuyến mãi và họ cho phép tôi có được hàng nghìn IP duy nhất.

Tôi bắt đầu chỉ với một tập lệnh rất đơn giản gửi 100 yêu cầu như thế này:


Cách này hiệu quả và tăng tốc độ từ khoảng 2-3 IP mỗi phút lên khoảng 30 IP mỗi phút. (Mỗi yêu cầu mất khoảng 0,5-2 giây.)

Để tăng tốc độ hơn nữa, vì tốc độ này vẫn chưa đủ nhanh đối với tôi, tôi muốn triển khai một số luồng đơn giản để gửi các yêu cầu đồng thời.

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)

Tôi đã thêm một vài ID thiết bị khác nhau để phòng ngừa, và tôi đã có danh sách 10.000 proxy xoay vòng 1 phút từ ProxyScrape đã được dán vào proxies.txt. Tôi cũng đảm bảo thêm thời gian ngủ ngắn giữa các lần khởi động mỗi luồng để không phải tất cả đều xảy ra cùng một lúc. (điều này có vẻ gây ra sự cố.)

Bây giờ tất cả những gì tôi phải làm là thay đổi số trong “phạm vi (500)” để đếm được hàng nghìn IP.

Tất cả những thay đổi này giúp tôi có được vài trăm IP mỗi phút. Sau đó, tôi tiếp tục gửi vài nghìn IP mỗi ngày trong cuộc săn lùng kéo dài 2 tuần.

Theo ban tổ chức sự kiện, tôi đã nhận được 149k IP duy nhất, mặc dù tôi nghi ngờ rằng tôi đã gửi nhiều hơn thế nữa. Điều đó đưa tôi lên vị trí thứ 6 trên toàn thế giới và để lại cho tôi một số hàng hóa ngọt ngào.
Bạn có thể xem kết quả cuộc thi tại đây: https://community.ipinfo.io/t/the-great-ip-hunt-is-over/3906

Tôi đã mua cho mình một bộ nhãn dán, một chiếc áo phông “Tôi là người chiến thắng cuộc thi Huntathon”, một tấm thiệp có bản đồ Internet và một vài chiếc tất IPinfo.

Tất cả những thứ này đều đến sau khoảng 3 tuần:

Theo tuyên bố miễn trừ trách nhiệm, nhóm IPinfo mong đợi ứng dụng sẽ được thiết kế ngược và thực sự rất vui khi biết mọi người tìm ra các giải pháp sáng tạo như thế nào.

Cuối cùng, đó là khoảng thời gian vui vẻ khi được gặp gỡ nhiều người mới, tìm hiểu một số điều về proxy và kỹ thuật đảo ngược Android, và tất nhiên là nhận được một số sản phẩm miễn phí.

Benji