NIC卡的MAC地址正在变化

时间:2015-01-25 22:00:34

标签: c# unique nic

我有一个软件客户端,我正在销售给一个非常小众的市场。我提供30天的免费试用,我想确保没有购买产品激活密钥的人在第一次使用软件30天后就无法使用该软件。我环顾四周,看到有人建议使用机器第一块NIC卡的MAC地址作为机器的唯一标识。

我卖了大约十几份软件,一切都很好。然后在过去一周,两位新买家遇到了问题。当软件检查我的网站时,它还会存储日志文件,告诉我这两个客户端的会话之间的MAC地址发生了变化。

对于一台机器,它在第一次会话后改变了一次。另一方面,它似乎每3或4次更改我的软件。

我现在在网上看到有关能够欺骗MAC地址的文章。他们的防火墙或其他安全设置是否可能正在更改此MAC地址?我使用以下C#代码来检索MAC地址,这可能会给我一些我没想到的东西吗?

NetworkInterface.GetAllNetworkInterfaces()[0].GetPhysicalAddress().ToString()

我刚注意到这两个客户都位于加拿大。不知道这是否重要,但看起来确实非常巧合......

一个客户端未运行VMWare。她的机器正在运行“趋势科技”安全,如果这很重要......嗯......

2 个答案:

答案 0 :(得分:0)

它可能是虚拟机:

Maintaining the MAC Address of a Virtual Machine (VMWare-specific)

如果他们使用虚拟机,那么显然他们必须采取这些步骤才能使用您的软件。

此外,它可能就是他们正在扯你。 :D在您的博客上记录MAC地址时,记录该计算机的其他一些简单属性以确定可能性(或至少使其不太可能)也可能是好的。

请记住,如果他们配置单个VM并将其复制到同事,则指向VMWare站点的链接表明这将导致不同的MAC地址...如果这不是您希望支持的业务模型,你必须考虑这个用例。

答案 1 :(得分:-1)

我使用Reliable method to get machine's MAC address in C#中的技术来提供我机器上的设备列表。

    Status  NetworkInterfaceType    Speed       GetPhysicalAddress()    Description
0   Down    Wireless80211           0           XXXXXXXXXXXX            Realtek RTL8188CUS Wireless LAN 802.11n USB Slim Solo
1   Down    Wireless80211           0           XXXXXXXXXXXX            Microsoft Wi-Fi Direct Virtual Adapter
2   Up      Ethernet                100000000   XXXXXXXXXXXX            Realtek PCIe GBE Family Controller
3   Down    Ethernet                3000000     XXXXXXXXXXXX            Bluetooth Device (Personal Area Network)
4   Up      Loopback                            XXXXXXXXXXXX            Software Loopback Interface 1
5   Up      Tunnel                  100000      00000000000000E0        Microsoft Teredo Tunneling Adapter
6   Down    Tunnel                  100000      00000000000000E0        Microsoft ISATAP Adapter

问题在于我总是拿着列表中的第一项。使用Blackberry VPN的网络(可能还有其他东西,包括虚拟机)可以在他们认为合适的情况下插入新设备。包括列表的开头。对他们来说,列表的顺序变化很大。

所以我的决心是让我的客户端在一个以管道分隔的字段中发送列表中的每个物理地址。服务器将存储一个地址,但会查看发送给它的每个项目。如果有任何匹配,那么客户可以启动。

这留下了一个问题,我在注册时如何知道我选择了一个留在列表中的地址(而不是与可能会离开的移动设备相关联的地址)。我考虑过将整个列表存储在服务器上,但这很快就会变得复杂。相反,我将第一个活动的存储在服务器上(第一次登录)。然后,我将监控谁被拒绝并更新他们的地址,尝试捕捉模式,然后可能看看我是否可以编写自我解决方案。诀窍是这样做而不会否定我已经投入的所有检查。