Good question and I hope others will answer with their views. Here's mine:
I decided to avoid using IP address and domain names. Instead, I license per computer, by matching the computer name (found in System.Environment.MachineName).
When designing license security, there is a balance you need between ease of use and total protection. I have decided to keep things closer to the ease of use side. Therefore, I don't actually embed anything specific about their system into my license files. That way, they can move the files to a new computer without difficulty. The idea for me is to keep customers from getting frustrated. I want happy customers because it makes my business far easier to run.
So how do I match to a computer name? My web control has a public global string property. The user must assign that property to the serial number (embedded in the license file) and the computer name. They do this in Application_Start. Later if they change the computer name, they update the application. You can see how this favors ease of use over total protection.
My greatest protection is that my customers are happy and do purchase licenses as they add new servers.
--- Peter Blum
Creator of Professional Validation And More Suite, Peter's Date Package, and Peter's Polling Package
www.PeterBlum.com