如何识别具有唯一ID的远程计算机。
在共享IP的网络上,IP地址可能不够独特。 MAC或其他硬件信息不可用或取决于操作系统,体系结构,配置等。
Cookie是一种可能的解决方案。我可以删除浏览器上的cookie,更改浏览器。此外,我必须阅读大量信息(每个存储的cookie上的每个客户端)。在我的数据库中不存在任何关系。
哪个可能是解决方案?
答案 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);
}
}