[FEATURE REQUEST] Unique server number on VServer

Peter De Berdt peter.de.berdt at pandora.be
Wed Jul 21 23:59:10 CDT 2004


>>> Would it be possible to obtain a semi-unique serial number (e.g. MAC
>>> Address) from the server through an SQL Query?
>> Do you mean physical address of the network connection, something like
>> XX-XX-XX-XX-XX-XX?
>>
>> Currently this is not implemented, but I think that we can add this to
>> VServer
>> class interface. Say,
>>
>>   String s = VServer.GetMacAddress()
>>

That's exactly what I'd need

>> What do you think, Ruslan?
>
> * I need more info about what is Mac address.
>
> * if this is simply Ethernet card address, then I think more correctly 
> use
> other name.

Yes, it simply the Ethernet card address, but in all programming 
languages, it's called MAC Address: Media Access Control Address.

The only thing that can break it, is when there are two or more network 
interfaces available on the system (e.g. Ethernet and Airport). It's  a 
simple toolbox call, if I'm right. You can see it on MacOS X when you 
open up System Profiler and look under network (e.g. 
00:30:65:12:44:5c).

The IP address won't do, it's very easily changed with basic system 
knowledge.
>
> * and I'd like to get more detailed picture what you try to do.
>> From first letter I have not understand good.
> In steps...
>     server here,
>     my client app here,
>     user try do not legal thing as...
>     I want protect using this idea...
>
OK, let me explain:

A year or two back, we used Rainbow dongles to protect our software 
from being installed on two servers. Due to various reasons (they 
didn't work on MacOS X, customers that switched systems needed a new 
dongle, the price went up), we decided to implement a new way of 
preventing our software to be installed on two systems:

1. Using the client's id (every customer has its own id in our 
database) and the most unique number you can obtain on a computer 
system, being the MAC Address (it can be spoofed and it has its flaws, 
but for decent protection it's about the only thing you can use), we 
create a license key (an encrypted string). This is done on a client, 
but it gets the MAC Address from the server (because each workstation 
has a different MAC Address of course).
2. This license key is sent to our own company server (by pressing a 
button in our application), which is running a database containing all 
customer licenses and activated modules (our software has several 
modules that can be active or disabled). Now we can have three 
scenarios:
	• The customer's license has an empty MAC Address field in our 
database (first use of our software) -> The MAC Address is extracted 
from the license key and is put in our database, an encrypted string is 
sent back, approving the license and activating the purchased modules 
and number of concurrent users
	• The customer's license already has a MAC Address field filled in in 
our database and it matches the one being sent in the request -> the 
customer gets an approved license back and activates the purchased 
modules and number of concurrent users (e.g. the purchased an extra 
user or module)
	• The customer's license already has a MAC Address field filled in in 
our database and it doesn't match the one being sent in the request -> 
the customer gets a message saying his system information has changed 
and he needs to provide a reason why. This reason is then manually 
reviewed and if it is a valid reason, the MAC Address field in our 
database is cleared so they can reregister it

With single user applications, I can just use (in RB 5.5):
Dim ni as NetworkInterface
ni=System.GetNetworkInterface
StaticText1.Text=ni.MacAddress

However, for a multi-user version of our app (using Valentina Server), 
I would need to be able to get the MAC Address of the server and I 
would prefer if I didn't have to put an extra application besides 
Valentina Server to do just this.

Now you may ask: why not register the application on the server? 
Because most of the times, it's one of the employees that calls for 
support and they don't have access to the server or don't know how to 
use it. If we can tell them to push a button in our app on their 
workstation (and they have an internet connection on their computer), 
it's something they CAN do :-)

Hope this clears things up...

Best regards

Peter De Berdt


More information about the Valentina-beta mailing list