1

我正在为移动设备设计一个系统,一次只能分配给一个工作。因此,我需要能够通过访问它自己的唯一静态 IP 地址或其设备 ID 来了解正在使用哪个移动设备。我不想自己为每台机器分配一个 ID,这就是为什么静态 IP 可以很好地工作的原因。

但是,在尝试检索客户端 IP 地址时,我正在检索无线路由器的 IP 或其他一些不是移动设备 IP 的 IP。

我想将该 ip 存储在一个表中并控制分配给它的作业。我怎样才能做到这一点?

我已经尝试了以下方法,但我得到了无线 ip:

   var hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    var ip = (
               from addr in hostEntry.AddressList
               where addr.AddressFamily.ToString() == "InterNetwork"
               select addr.ToString()
        ).FirstOrDefault();

如果存在更好的选择,我宁愿不设置 cookie。

蒂亚!

4

5 回答 5

1

当您使用手机访问您的网页时,您对唯一 ID 的选择更加有限(与原生移动应用程序相比)。在过去的 13 年中,我已经构建了 100 多个移动(原生)系统,但从未创建过移动 Web 应用程序,如果我有点“错过目标”,请原谅我。

如果您正在寻找 MAC 地址、GUID 或手机的 IMEI(或其他一些唯一值),在我看来,使用一些 JavaScript 是一个合理的起点——因为此查询需要在手机上执行,并且该值需要作为 GET 或 POST 调用的一部分传入。作为替代方案,您可以检查新的 HTML5 是否支持对其主机的任何类型的直接“查询”能力?

如果我是你,我会远离 IP 地址,因为这会很快改变(用户走到星巴克并通过蜂窝网络访问服务器,然后在点咖啡时拿起 Wi-Fi),然后上电梯并开启办公网络。

不过,您可能希望避免使用 cookie,它仍然是一种有效的方法(如果唯一值需要在会话中保持不变)。此外,如果值不需要跨会话保持不变,只需创建 GUID / UUID 作为服务器初始响应的一部分(包括在来自手机的所有后续会话调用中)。任何与 cookie 相关的内容都存在用户删除 cookie 的潜在问题,从而使客户端显示为新用户 - 具体取决于您的要求。

最后,自己创建一个 GUID (JavaScript) 并将其作为请求的一部分提交(显然这不会在会话中持续存在)。

于 2012-07-07T14:08:44.707 回答
1

你应该更好地描述你的环境。看起来您正在运行带有 .net 代码的 IIS。如果您正在寻找在 PHP 中获取客户端 IP 地址(如果您也在 IIS 上运行 PHP),您可以使用此处的答案如何在 PHP 中获取客户端 IP 地址?:使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 并保存 $_SERVER['REMOTE_ADDR']

如果您仅使用 .NET(无 PHP)运行 IIS,则可以使用在负载平衡环境中获取 IIS 服务器变量的客户端值的答案:HttpContext.Current.Request.ServerVariables.Item("REMOTE_HOST") 和 Request.ServerVariables( “X-Forwarded-For”)

问候

约瑟夫

于 2012-07-07T17:03:01.400 回答
0

你可以用GetDeviceUniqueID这个。看:

http://blogs.msdn.com/b/windowsmobile/archive/2006/01/09/510997.aspx

...除非您尝试为通过 IE 移动设备发出 Web 请求的设备获取唯一的设备 ID。

于 2012-07-06T21:03:43.660 回答
0

您可以使用MAC 地址。您可以使用.Net Compact Framework检索它。

于 2012-07-06T21:12:30.107 回答
0

我从这个网站得到了答案。

我将 Request.ServerVariables["REMOTE_ADDR"] 传递给上述站点中的函数,并获得了我将用来识别每台机器的客户端计算机名称。IP 可以更改,但计算机名称很少会更改。感谢您的输入。

于 2012-07-09T13:27:33.400 回答