Này, tôi là Benji, một ProxyScrape người dùng và tôi thích lộn xộn với các hệ thống và tìm hiểu cách các chương trình hoạt động trong nền. Tôi cũng làm một số quản trị máy chủ và mã hóa không thường xuyên (https://benji.link). ProxyScrape yêu cầu tôi viết một chút về việc tôi đã sử dụng proxy của họ để làm gì, vì vậy chúng ta bắt đầu: Đối với Halloween 2023, ipinfo.io tổ chức
Này, tôi là Benji, một ProxyScrape người dùng và tôi thích lộn xộn với các hệ thống và tìm hiểu cách các chương trình hoạt động trong nền. Tôi cũng làm một số quản trị máy chủ và mã hóa không thường xuyên (https://benji.link). ProxyScrape yêu cầu tôi viết một chút về những gì tôi đã sử dụng proxy của họ, vì vậy chúng ta bắt đầu:
Đối với Halloween 2023, ipinfo.io đã tổ chức cuộc thi "Halloween Hunt", nơi người dùng được cho là sử dụng ứng dụng IPinfo để gửi IP và dữ liệu GPS. Tôi đoán họ muốn cải thiện dữ liệu IP của họ, trong khi chúng tôi có cơ hội giành được một số hàng hóa.
Mỗi ngày trong 2 tuần, họ chọn một người dùng từ các bài gửi để giành được hàng hóa của ngày hôm đó. Bằng cách đó, nó không phải là một trò chơi số hoàn chỉnh và có một số may mắn liên quan.
Tôi bắt đầu cuộc hành trình của mình, theo cách nó có thể được 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 chuột tự động chậm để bật / tắt Chế độ trên máy bay trên điện thoại của mình để buộc một IP di động mới từ ISP của tôi. Điều này hoạt động rất 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 đã nhận được tổng cộng khoảng 400-500 IP với điện thoại của mình bằng phương pháp đó, trước khi tôi bắt đầu nghĩ ra những cách nhanh hơn.
Khi tôi về nhà vào ngày hôm đó, tôi bắt đầu thiết kế ngược ứng dụng để xem liệu có cách nào tôi có thể dễ dàng di chuyển xung quanh hệ thống và sử dụng proxy mà không cần phải sử dụng điện thoại cho nó 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ì đang được gửi 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 giám sát lưu lượng truy cập đi qua ứng dụng IPinfo. (ID thiết bị được tô sáng)
Trước tiên, tôi chỉ thử 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. Thông qua một số thử nghiệm và lỗi, tôi nhận thấy rằng bằng cách nào đó nó có 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 điều duy nhất quan trọng 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'
}
ID thiết bị bạn chỉ có thể sao chép từ bất kỳ điện thoại nào mà bạn đã cài đặt ứng dụng và tôi có thể đã tạo ra thứ gì đó để làm cho nó tạo ID cho tôi mà không cần ứng dụng, nhưng điều đó không đáng để gặp rắc rối.
Bây giờ điều duy nhất còn lại để làm là sử dụng proxy, đó là phần dễ dàng.
Tôi quyết định sử dụng ProxyScrape proxy dân cư vì tôi đã có một số dữ liệu miễn phí từ một chương trình khuyến mãi và họ cho phép tôi nhận được hàng nghìn IP duy nhất.
Tôi bắt đầu chỉ với một kịch bản rất đơn giản đã gửi 100 yêu cầu như thế này:
Điều này hoạt động tốt 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. (Với mỗi yêu cầu mất từ 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 thực hiện 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 chỉ trong trường hợp và tôi nhận được danh sách 10 000 proxy xoay 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 lúc bắt đầu mỗi chủ đề để tất cả không xảy ra cùng một lúc. (dường như gây ra vấn đề.)
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 hàng nghìn IP.
Tất cả những thay đổi này cho phép tôi nhận đượ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 cho 2 tuần săn lùng.
Theo các nhà tổ chức sự kiện, tôi đã quản lý để có được 149k IP duy nhất, mặc dù tôi nghi ngờ rằng tôi đã gửi nhiều hơn 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 gói nhãn dán, một "Tôi là một chiếc áo phông chiến thắng Huntathon", một thẻ ghi chú với bản đồ Internet và một số vớ IPinfo.
Tất cả đều đến khoảng 3 tuần sau đó:
Như một tuyên bố từ chối trách nhiệm, nhóm IPinfo đã mong đợi ứng dụng được thiết kế ngược và thực sự khá vui khi tìm hiểu cách mọi người tìm thấy các giải pháp sáng tạo xung quanh các khối.
Cuối cùng, đó là một khoảng thời gian thú vị khi gặp gỡ những 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, nhận được một số hàng hóa miễn phí.
Benji