【问题标题】:Uniquely identifying mobile devices over a network for webforms通过网络唯一地识别网络表单的移动设备
【发布时间】:2012-07-06 20:57:53
【问题描述】:

我正在为移动设备设计一个系统,该系统一次只能分配给一项工作。所以我需要能够通过访问它自己的唯一静态 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。

TIA!

【问题讨论】:

  • 你所有的设备都是 windows-mobile 的吗?
  • 是的。它们都在运行 windows 嵌入式手持设备 6.5。

标签: .net windows-mobile static-ip-address


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    如果您仅使用 .NET(没有 PHP)运行 IIS,您可以使用Getting client values of IIS Server Variables in Load Balanced Environment 的答案: HttpContext.Current.Request.ServerVariables.Item("REMOTE_HOST") 和 Request.ServerVariables("X-Forwarded-For")

    问候

    约瑟夫

    【讨论】:

    • 由于网络如何处理 IP 分配、路由和安全性,这在蜂窝网络上的工作方式略有不同。
    【解决方案3】:

    您可以使用MAC Address。您可以使用.Net Compact Framework 检索此信息。

    【讨论】:

    • 尝试此操作时,它似乎从服务器而不是本地计算机获取 MAC 地址。
    • 好的,我明白了,您有一个传入请求,并且您想为该请求分配一个唯一 ID。当我在 6.5 中为 CF Compact 编程时,我调用 GetDeviceUniqueID,它在客户端执行并将请求中的值传递给服务器。
    • Erik,我刚刚尝试了 GetDeviceUniqueID,我得到的错误是“无法加载 DLL 'coredll.dll':找不到指定的模块”是在服务器上搜索它还是什么?
    • 您在 Windows Mobile 设备 上拨打GetDeviceUniqueID 吗?
    【解决方案4】:

    您可以为此使用GetDeviceUniqueID。见:

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

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

    【讨论】:

    • 我已经尝试过这个例程但无济于事,因为我在尝试查找 coredll.dll 时遇到错误。机器上似乎不存在。
    • 现在如何通过 Web 请求获取唯一的设备 ID?我怎样才能以这种方式获取它?
    • @Eric: coredll.dll 绝对应该存在于 Windows 移动设备上。您要做的是编写您的 Web 方法,以便传入的参数之一是客户端设备的唯一 ID,客户端将使用 GetDeviceUniqueID 获取该 ID。
    【解决方案5】:

    我从这个website 得到了答案。

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

    【讨论】:

    • 名称相同的可能性有多大?
    • 在这种情况下,这是极不可能的,因为每个移动设备的名称都会在我们的网络中进行调整。不过,我当然明白你的意思。
    猜你喜欢
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多