code: function Probe(intf, offswitch) {
    EventEmitter.call(this);
  
    // id only used for figuring out logs
    this._id = uniqueId();
    debug(`Creating new probe (${this._id})`);
  
    this._interface = intf;
    this._offswitch = offswitch;
    this._questions = new RecordCollection();
    this._authorities = new RecordCollection();
    this._bridgeable = new RecordCollection();
  
    this._isStopped = false;
    this._numProbesSent = 0;
    this._timers = new TimerContainer(this);
  
    // listen on answers/probes to check for conflicts
    // stop on either the offswitch or an interface error
    intf.using(this)
      .on('answer', this._onAnswer)
      .on('probe', this._onProbe)
      .on('error', this.stop);
  
    offswitch.using(this).once('stop', this.stop);
  
    // restart probing process if it was interrupted by sleep
    sleep.using(this).on('wake', this.stop);
  }
docs: Creates a new Probe
  @class
  @extends EventEmitter
  
  A probe will check if records are unique on a given interface. If they are
  unique, the probe succeeds and the record name can be used. If any records
  are found to be not unique, the probe fails and the records need to be
  renamed.
  
  Probes send 3 probe packets out, 250ms apart. If no conflicting answers are
  received after all 3 have been sent the probe is considered successful.
  
  @emits 'complete'
  @emits 'conflict'
  
  @param {NetworkInterface} intf - the interface the probe will work on
  @param {EventEmitter}     offswitch - emitter used to shut this probe down