DEV Community

98IP Proxy
98IP Proxy

Posted on Fully Autonomous

ASN Data Cannot Prove a Residential Proxy Is Residential

ASN Data Cannot Prove a Residential Proxy Is Residential

A proxy exits through an ASN with a familiar broadband-carrier name. Is that proof that the route is residential?

No. It is useful evidence about routing context, but it does not prove physical access type, device location, participant consent, exclusivity, reputation, or how a destination will classify the address.

I work with 98IP. This is the audit model I would want a buyer to use before approving any residential proxy product—including ours.

Keep five evidence layers separate

Represent every sampled exit as a record with distinct fields:

type ExitAudit = {
  sampleId: string;
  observedAt: string;
  requested: {
    product: "rotating-residential" | "static-isp" | "mobile" | "datacenter";
    country: string;
    addressFamily: "ipv4" | "ipv6";
    sessionMode: "rotating" | "sticky";
  };
  routing: {
    asn: number | null;
    prefix: string | null;
    rdapOrganization: string | null;
  };
  classifications: Array<{
    source: string;
    value: "residential" | "isp" | "mobile" | "datacenter" | "unknown";
    checkedAt: string;
  }>;
  provenance: {
    productDocumentVersion: string | null;
    consentMechanismReviewed: boolean;
    revocationProcessReviewed: boolean;
    upstreamControlsReviewed: boolean;
  };
  outcome: {
    tunnelOk: boolean;
    contentValid: boolean;
    regionValid: boolean;
    firstAttempt: boolean;
    latencyMs: number;
  };
};
Enter fullscreen mode Exit fullscreen mode

The structure prevents a common analytical shortcut: allowing a broadband-sounding ASN to overwrite missing provenance evidence.

Score disagreement, not “truth”

Network-type databases can disagree. Do not average their labels into a fake consensus. Preserve every observation and compute a disagreement rate:

function classificationSummary(row: ExitAudit) {
  const labels = row.classifications.map(x => x.value);
  const expected = new Set(["residential", "isp"]);
  const expectedVotes = labels.filter(x => expected.has(x)).length;
  const known = labels.filter(x => x !== "unknown").length;

  return {
    sources: labels.length,
    known,
    expectedRate: known ? expectedVotes / known : null,
    unanimous: new Set(labels.filter(x => x !== "unknown")).size <= 1,
  };
}
Enter fullscreen mode Exit fullscreen mode

This still does not certify provenance. It only describes how classification sources treated the sample at specific times.

Add concentration to the audit

Thirty sampled exits may look diverse while 80% of the traffic comes from one ASN. Measure shares by region and session mode:

function largestShare(values: Array<string | number | null>) {
  const usable = values.filter((v): v is string | number => v !== null);
  const counts = new Map<string | number, number>();
  for (const value of usable) counts.set(value, (counts.get(value) ?? 0) + 1);
  return usable.length
    ? Math.max(...counts.values()) / usable.length
    : null;
}
Enter fullscreen mode Exit fullscreen mode

Run this for ASNs and for a consistently defined prefix bucket. A large advertised pool does not guarantee that your workload sees diverse networks in the countries you buy.

Provenance needs documents and controls

Ask how devices or networks enter the exact product, what participants see before opting in, how they revoke participation, how fast removal occurs, whether upstream suppliers are involved, and how the same requirements are audited downstream.

Also review abuse handling, destination restrictions, metadata retention, security ownership, and the date and scope of any independent assurance.

The result is not a binary “ethical” badge. It is a product-specific evidence package with an owner and an expiry date.

Test the workload separately

Only use targets you own or are authorized to test. For every sample, validate the content contract—not only HTTP status. Record the requested and observed region, first-attempt result, latency, session continuity, and cost per valid result.

Keep retry recovery separate. Otherwise a weak route can look successful after consuming extra bandwidth and target capacity.

Use four decisions

  • Pass: documentation and sampled behavior meet the predefined gates.
  • Conditional pass: only named products, regions, or traffic levels are approved.
  • Fail: repeated contradictory clusters or missing required controls remain unresolved.
  • Inconclusive: the sample or documents cannot support a decision.

Inconclusive should trigger better evidence, not automatic approval.

Use proxies only for authorized systems and data. Respect provider contracts, destination rules, rate limits, privacy requirements, and applicable law. Network-type analysis must not be used to evade controls or misrepresent identity.

Disclosure: I work with 98IP. More proxy testing guidance: https://en.98ip.com/?k=dev

Top comments (0)