code: func (c *Client) Resolve(ip net.IP) (net.HardwareAddr, error) {
  	err := c.Request(ip)
  	if err != nil {
  		return nil, err
  	}
  
  	// Loop and wait for replies
  	for {
  		arp, _, err := c.Read()
  		if err != nil {
  			return nil, err
  		}
  
  		if arp.Operation != OperationReply || !arp.SenderIP.Equal(ip) {
  			continue
  		}
  
  		return arp.SenderHardwareAddr, nil
  	}
  }
docs: // Resolve performs an ARP request, attempting to retrieve the
  // hardware address of a machine using its IPv4 address. Resolve must not
  // be used concurrently with Read. If you're using Read (usually in a
  // loop), you need to use Request instead. Resolve may read more than
  // one message if it receives messages unrelated to the request.