如何使用唯一ID标识每台远程计算机

时间:2011-11-14 17:30:04

标签: c# asp.net .net

如何识别具有唯一ID的远程计算机。

在共享IP的网络上,IP地址可能不够独特。 MAC或其他硬件信息不可用或取决于操作系统,体系结构,配置等。

Cookie是一种可能的解决方案。我可以删除浏览器上的cookie,更改浏览器。此外,我必须阅读大量信息(每个存储的cookie上的每个客户端)。在我的数据库中不存在任何关系。

哪个可能是解决方案?

2 个答案:

答案 0 :(得分:4)

如果你想要一个永久性的标识符,简短的答案是你没有。您无法使用MAC地址。它可用于路由器,但是当它到达你的时候,它已被剥离(实际上,你和客户端机器之间的每个路由器都用它自己的MAC地址替换)。

你有IP地址(如果它来自一个私有的,不可路由的子网,或者如果请求被代理),你所拥有的就是代表客户端子网的单个IP地址。

您可以获取会话ID:

HttpContext.Current.Session.SessionID

问题在于它是一个相当短暂的值。您也可以在将来设置一个持久cookie,其过期日期很长。

客户端系统当然可以随意丢弃cookie(或不接受它)。

答案 1 :(得分:0)

给猫咪换皮的另一种方法是使用IPEndPoint,首先将请求发送到给定的连接。从这里将返回一个返回数据包,可以使用IPEndPoint.GetHashCode()。使用该整数作为您的ID的好处是它的4个字节而不是完整的字符串哈希。

private void ReceiveUdp()
{
    while (IsRunning)
    {
        var packet = RavelNet.CreatePacket();
        _count = RnetSocket.ReceiveFrom(packet.Data.Array, ref packet.RemoteEp);
        //I am storing the endpoint in my packet but you can do YourIPEndPoint.GetHashCode(); will return an integer identifier
        packet.Data.Ptr = _count;
        packet.ReadHeader();

        lock (_inProcess)
            _inProcess.Enqueue(packet);
    }
}