ทดสอบ
1 GB
US$2.63
US$2.63/GB
- ตรวจสอบ ISP หนึ่งรายในเมืองหนึ่งก่อน
- กำหนดเป้าหมายตาม ASN รัฐ เมือง และ ZIP
- HTTP, HTTPS, SOCKS5
กรณีการใช้งาน · QA และฝ่ายสนับสนุน
ตั๋วบางใบสมเหตุสมผลเฉพาะบนเครือข่ายเดียว มันล้มเหลวบน fixed wireless เมืองผิดปรากฏขึ้น หรือภาพค้างบนผู้ให้บริการเคเบิลรายหนึ่ง IP บ้านบนเครือข่ายนั้นเปลี่ยนตั๋วให้เป็นแบบทดสอบที่คุณทำซ้ำได้
คำตอบสั้น
ฉันจะจำลองบั๊กที่เกิดกับผู้ให้บริการอินเทอร์เน็ตรายเดียวได้อย่างไร?
การจำลองบั๊กเครือข่ายหมายถึงการทำให้ความล้มเหลวของลูกค้าเกิดขึ้นซ้ำจากประเภทการเชื่อมต่อเดียวกัน: ผู้ให้บริการรายเดียวกัน เมืองเดียวกัน และควรเป็นช่วงเวลาเดียวกัน Broadband Proxies มอบ IP บ้านในสหรัฐฯ ให้ทีม QA และทีมซัพพอร์ตตาม ASN และเมือง เซสชันแบบ Sticky มีอายุ สูงสุด 30 นาที (IP อาจเปลี่ยนเร็วกว่านั้น เช่น หากอุปกรณ์ที่บ้านออฟไลน์) แพ็กเกจ 1 GB ราคา US$2.63 ไม่ต้อง KYC และจ่ายด้วยคริปโต
| ตั๋วปัญหาที่พบบ่อย | ล้มเหลวเฉพาะบน fixed wireless, ตรวจพบเมืองหรือรัฐผิด, เนื้อหาเก่าค้างบนเครือข่ายเดียว, ถูกบล็อกว่าเป็นที่น่าสงสัย |
|---|---|
| การกำหนดเป้าหมาย | ASN พร้อมรัฐ เมือง หรือ ZIP เช่น USERNAME-country-us-state-az-city-phoenix-asn-22773 (เครือข่าย Cox ใน Phoenix) |
| เซสชันแบบสติกกี้ | สูงสุด 30 นาที (IP อาจเปลี่ยนเร็วกว่านั้น เช่น หากอุปกรณ์ที่บ้านออฟไลน์) |
| โปรโตคอล | HTTP, HTTPS (CONNECT) และ SOCKS5 |
| สิ่งที่ต้องบันทึก | การกำหนดเป้าหมายที่ร้องขอ, exit IP, origin ASN, ช่วงเวลา UTC, session id |
| สิ่งที่ไม่สามารถจำลองได้ | เราเตอร์, Wi-Fi, อุปกรณ์ และการตั้งค่า DNS ภายในเครื่องของลูกค้า |
| ราคา | US$2.63 สำหรับ 1 GB, US$5.94 สำหรับ 10 GB, ผู้ใช้ย่อยต่อโปรเจกต์ |
exit แบบ residential มอบ IP สาธารณะของเครือข่ายลูกค้าให้บริการของคุณ ตรรกะใดก็ตามที่อ้างอิงจาก IP นั้นจะทำงานเหมือนกับที่ทำกับลูกค้า มีตั๋วปัญหาสี่ประเภทที่พบบ่อย
พร็อกซีคัดลอก IP สาธารณะและเครือข่ายของมัน ไม่ใช่การเชื่อมต่อทั้งหมด เราเตอร์, Wi-Fi, ส่วนขยายเบราว์เซอร์ และอุปกรณ์ของลูกค้ายังอยู่นอกเหนือการเข้าถึง ขอเวอร์ชันเบราว์เซอร์และภาพหน้าจอเพื่อครอบคลุมสิ่งเหล่านั้น
DNS ก็เป็นอีกข้อจำกัดหนึ่ง เมื่อผ่านพร็อกซี ชื่ออาจถูกแปลงโดยเครือข่ายพร็อกซีแทนที่จะเป็นตัวแปลงของ ISP ดังนั้นบั๊กที่เกี่ยวกับ DNS เท่านั้นจึงต้องใช้วิธีอื่น
IPv6 ก็ต้องระวังเช่นกัน การตรวจสอบด้านล่างใช้ api.ipify.org ซึ่งตอบกลับผ่าน IPv4 เท่านั้น หากบั๊กปรากฏเฉพาะบน IPv6 การทดสอบด้วยพร็อกซีสามารถยืนยันหรือตัดเส้นทาง IPv4 ออกได้ คุณยังต้องมีสาย IPv6 แบบเนทีฟเพื่อยืนยันส่วนที่เหลือ
รวบรวมข้อมูลเครือข่าย
ขอชื่อ ISP เมืองหรือ ZIP เวลาที่เกิดความล้มเหลว และข้อความข้อผิดพลาด การค้นหาเช่นคู่มือ exit IP ของเรา ให้ ASN โดยไม่ต้องแชร์รหัสผ่านหรือเข้าถึงเราเตอร์
สร้างชื่อผู้ใช้แบบติดอยู่ (sticky username)
สำหรับลูกค้า Cox ใน Phoenix: USERNAME-country-us-state-az-city-phoenix-asn-22773-session-bug4521-ttl-30
ยืนยันและบันทึก exit
รันสคริปต์ด้านล่าง โดยจะบันทึก exit IP, origin ASN และคำนำหน้า แล้วเฝ้าดูการเปลี่ยนแปลงของ IP
จำลองภายในเซสชัน
ใช้ชื่อผู้ใช้เดียวกันในเบราว์เซอร์หรือตัวรันการทดสอบ ทำให้เสร็จภายในหน้าต่างเซสชัน และบันทึกการเปลี่ยนแปลง IP ใดๆ
รันเครือข่ายควบคุม
ทำซ้ำขั้นตอนบน ASN อื่นในเมืองเดียวกัน หากบั๊กหายไป แสดงว่าเครือข่ายเป็นส่วนหนึ่งของสาเหตุ
# Keep one sticky exit for a bug reproduction and write a record for the ticket.
import json
import time
from datetime import datetime, timezone
import requests
GATEWAY = "gw.broadbandproxies.com"
PORT = 7777
TARGET = "country-us-state-az-city-phoenix-asn-22773" # Cox network in Phoenix
SESSION = "bug4521"
USERNAME = "USERNAME-" + TARGET + "-session-" + SESSION + "-ttl-30"
PASSWORD = "PASSWORD"
proxy = "http://%s:%s@%s:%d" % (USERNAME, PASSWORD, GATEWAY, PORT)
proxies = {"http": proxy, "https": proxy}
def now():
return datetime.now(timezone.utc).isoformat(timespec="seconds")
def exit_ip():
r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=30)
r.raise_for_status()
return r.json()["ip"]
def origin(ip):
r = requests.get(
"https://stat.ripe.net/data/prefix-overview/data.json",
params={"resource": ip, "sourceapp": "bug-repro"},
timeout=30,
)
r.raise_for_status()
data = r.json()["data"]
return [a["asn"] for a in data.get("asns", [])], data.get("resource")
ip = exit_ip()
asns, prefix = origin(ip)
record = {"target": TARGET, "session": SESSION, "start_utc": now(), "exit_ip": ip,
"origin_asns": asns, "prefix": prefix, "ip_changes": []}
# Reproduce the bug in the browser now, with the same username.
# This loop only checks every 5 minutes that the exit IP has not moved.
for _ in range(5):
time.sleep(300)
current = exit_ip()
if current != ip:
record["ip_changes"].append({"time_utc": now(), "new_ip": current,
"origin_asns": origin(current)[0]})
ip = current
record["end_utc"] = now()
print(json.dumps(record, indent=2))| ฟิลด์ | ตัวอย่าง | ทำไมจึงสำคัญ |
|---|---|---|
| การกำหนดเป้าหมายที่ร้องขอ | country-us-state-az-city-phoenix-asn-22773 | เพื่อนร่วมงานสามารถรันการทดสอบเดียวกันได้ในภายหลัง |
| Exit IP | 203.0.113.24 (ช่วงเอกสาร) | ค้นหาในบันทึกเซิร์ฟเวอร์และ CDN ของคุณ |
| Origin ASN และคำนำหน้า | AS22773 จาก RIPEstat | พิสูจน์เครือข่าย ไม่ใช่แค่คำขอ |
| ช่วงเวลา UTC | 2026-10-18 14:05 ถึง 14:30 UTC | จับคู่บรรทัดบันทึกข้ามเขตเวลา |
| Session id และ TTL | bug4521, 30 นาที | แสดงว่า IP ยังคงเดิมหรือไม่ |
| ผลลัพธ์ | HTTP 403 ที่ /checkout/ | บั๊กถูกจำลองได้หรือไม่ |
| ตัวควบคุม | เมืองเดียวกันบน AS209: ไม่มีข้อผิดพลาด | แยกสาเหตุจากเครือข่ายออกจากสาเหตุจากโค้ด |
ทดสอบไซต์ แอป หรือ API ของคุณเอง หรือระบบที่เจ้าของอนุญาตให้คุณทดสอบ การจำลองตั๋วปัญหาควรใช้คำขอเพียงไม่กี่ครั้ง ไม่ใช่การครอวล์ นโยบายการใช้งานที่ยอมรับได้ ห้ามการยิงคำขอจำนวนมากและการสแกนระบบโดยไม่ได้รับอนุญาตจากเจ้าของ
อย่าใส่ข้อมูลลูกค้าลงในชื่อผู้ใช้หรือ session id ให้ใช้หมายเลขตั๋ว เช่น bug4521 เท่านั้น ห้ามใช้ อีเมลหรือชื่อ เว็บไซต์ธนาคาร ภาครัฐ และพอร์ทัลชำระเงินถูกบล็อกในทุกแพ็กเกจ ดังนั้นจึงไม่สามารถทดสอบหน้าของผู้ให้บริการชำระเงินผ่านเกตเวย์ได้
การจำลองครั้งเดียวมักใช้การโหลดหน้าเพียงไม่กี่ครั้งบวกกับการตรวจสอบในสคริปต์ 1 GB (US$2.63) ครอบคลุมการทดลองบน ISP และเมืองเดียว 10 GB (US$5.94) เหมาะกับทีม QA ที่มีซับยูสเซอร์หนึ่งคนต่อผู้ทดสอบหนึ่งคน ทราฟฟิกไม่มีวันหมดอายุ
1 GB
US$2.63
US$2.63/GB
5 GB
US$3.75
US$0.75/GB
10 GB
US$5.94
US$0.59/GB
มีในทุกแพ็กเกจ: โปรโตคอล: HTTP, HTTPS, SOCKS5 · การกำหนดเป้าหมาย: ASN (ISP) รัฐ เมือง และ ZIP ในสหรัฐ; ประเทศอื่น ๆ; ความพร้อมใช้งานของเมืองแตกต่างกันไป · เซสชัน: แบบหมุนเวียนหรือแบบคงที่ (สูงสุด 30 นาที) · การยืนยันตัวตน: ชื่อผู้ใช้และรหัสผ่าน หรือรายการ IP ที่อนุญาต (สูงสุด 10 IP) · วันหมดอายุทราฟฟิก: ไม่มีวันหมดอายุ
ได้ ภายในเซสชันแบบสติกกี้: สูงสุด 30 นาที (IP อาจเปลี่ยนเร็วกว่านั้น เช่น หากอุปกรณ์ที่บ้านออฟไลน์) ใส่ -session-<id>-ttl-<minutes> ไว้ท้ายชื่อผู้ใช้ และใช้ id เดิมซ้ำในทุกเครื่องมือ บันทึก IP ทางออกตอนเริ่มและตอนจบ หากเปลี่ยนไป ให้ระบุในตั๋วปัญหา เพราะ IP ใหม่อาจอยู่บนพรีฟิกซ์ที่ต่างกัน
ได้บ่อยครั้ง กำหนดเป้าหมายเป็น AS21928 สำหรับ T-Mobile Home Internet หรือ AS22394 สำหรับ Verizon 5G Home ทางออกบนเครือข่ายเหล่านั้นมักใช้แอดเดรสร่วมกับผู้ใช้อื่น เช่นเดียวกับสายของลูกค้า Broadband Proxies ไม่สามารถบอกได้ว่าทางออกที่กำหนดเป็นเกตเวย์ภายในบ้านหรือโทรศัพท์ ดังนั้นให้บันทึก ASN แทนประเภทอุปกรณ์
ไม่ครอบคลุมตามที่แสดงไว้ในที่นี้ ตัวอย่างตรวจสอบทางออกด้วย api.ipify.org ซึ่งตอบกลับผ่าน IPv4 เท่านั้น หากความล้มเหลวของลูกค้าเกิดเฉพาะบน IPv6 การทดสอบพร็อกซีจะบอกคุณว่าเส้นทาง IPv4 ปกติดีหรือไม่ ให้ยืนยันฝั่ง IPv6 จากการเชื่อมต่อ IPv6 แบบเนทีฟ
ชื่อ ISP เมืองหรือ ZIP เวลาที่เกิดความล้มเหลว เบราว์เซอร์ และข้อผิดพลาดที่แน่ชัด ASN ช่วยได้มากที่สุด: หน้าเว็บค้นหาจะแสดง ASN ได้โดยไม่ต้องล็อกอิน ห้ามขอรหัสผ่าน การเข้าถึงเราเตอร์ หรือการควบคุมอุปกรณ์ของลูกค้าจากระยะไกล สิ่งเหล่านี้ไม่จำเป็นสำหรับการทดสอบฝั่งเครือข่าย
ได้ สร้างซับยูสเซอร์สำหรับผู้ทดสอบหรือโปรเจกต์แต่ละราย ซับยูสเซอร์แต่ละรายมีข้อมูลรับรอง เพดานทราฟฟิก และยอดการใช้งานของตนเอง คุณยังอนุญาต IP ได้สูงสุด 10 รายการแทนรหัสผ่าน ซึ่งเหมาะกับ CI runner ที่มีแอดเดรสคงที่ ทราฟฟิกมาจากแพ็กเกจเดียวที่คุณซื้อ
ASN ที่ให้บริการแตกต่างกันไปตามเครือข่าย เมือง และช่วงเวลาของวัน; หน้าชำระเงินจะแสดงว่ามีอะไรออนไลน์อยู่ และไม่มีการเปิดเผยจำนวน IP ต่อ ISP ให้ตัด ZIP ออกก่อน จากนั้นตัดเมือง และคง ASN ไว้กับรัฐ ผู้ให้บริการรายเล็กอาจออนไลน์เฉพาะบางช่วงเวลา จึงควรลองใหม่ในเวลาของวันที่ลูกค้ารายงาน บันทึกในตั๋วว่าคุณใช้ระดับการกำหนดเป้าหมายใด
1 GB US$2.63 · รวม ASN · ไม่ต้อง KYC
เริ่มต้นใช้งาน