Skip to content

WebRTC Fingerprinting ​

WebRTC fingerprinting creates a peer connection and observes ICE candidate types. This reveals network topology without exposing raw IP addresses.

How it works ​

Neoprint creates an RTCPeerConnection with no ICE servers, generates an offer, and collects ICE candidates. Only candidate types are recorded (not IP addresses).

Collected signals ​

SignalDescription
candidateCountNumber of ICE candidates generated
ipTypesUnique types: mdns, private, public
hasMdnsWhether mDNS candidates are present
hasPrivateWhether private IP candidates are present

Privacy ​

Raw IP addresses are never stored or exposed. Only the type classification (mdns/private/public) is recorded.

Entropy and stability ​

PropertyValue
Entropy~4 bits
Stability0.50
Typical duration50-100ms

WebRTC is the slowest collector due to ICE candidate gathering. Neoprint resolves after the first candidate arrives (+ 50ms batch window) instead of waiting for the full gathering process.

Excluded in privacy mode.

Usage ​

ts
const fp = await neoprint.get({ collectors: ['webrtc'] })
const rtc = fp.components.webrtc.value

console.log(rtc.candidateCount)  // 2
console.log(rtc.ipTypes)         // ["mdns"]
console.log(rtc.hasMdns)         // true

Released under the MIT License.