【问题标题】:Identifying sockets source machine识别套接字源机器
【发布时间】:2018-07-08 06:17:47
【问题描述】:

假设我有一个使用套接字连接与服务器通信的网站。还有一个软件(可能是操作系统服务,甚至是桌面软件)也与同一台服务器通信。

服务器是否可以检查这两个连接是否来自同一台机器

我确实知道,如果两个套接字来自浏览器中的两个不同选项卡,则可以使用 session id,但我不知道如果一个套接字来自例如,使用 socket.io 的浏览器,以及来自桌面软件或操作系统后台服务的另一个套接字......

谢谢!

【问题讨论】:

  • 恕我直言,有太多可能的变体无法确定。 IP 和 MAC 地址没有任何帮助(中介、网关等),这留下了在机器上安装客户端证书的选项(在有多个可能的客户端时有点不切实际,但如果你真的需要它,它可能是方式去)。
  • @Myst 感谢您的回答,我喜欢寻找客户证书的选项。在与许多可能的客户打交道时,是什么原因使它变得不切实际?
  • 我可能对它的实用性/不实用性有误,但是当有许多可能的客户共享一台机器时,控制证书安装和强制使用会变得更加困难。
  • @Myst 不错。非常感谢!我去看看!

标签: sockets networking websocket server


【解决方案1】:

如果这些连接来自同一台计算机,则源 IP 地址很可能相同。计算机中必须有多个网络适配器或单独的代理路由或类似的不寻常的东西,才能使 IP 地址不相同。

但是,反过来是一个问题,因为来自专用网络(家庭或工作网络)上不同计算机的连接可能都通过相同的网关,因此来自该专用网络上不同计算机的连接可能看起来具有相同的 IP 地址.

因此,您无法通过检查 IP 地址来唯一识别它是否正是同一台计算机。

如果两个连接都来自浏览器,您可以使用唯一的 cookie 对第一个连接进行 cookie,然后检查第二个连接以查看它是否具有相同的 cookie。但是,如果其中一个客户端不是浏览器,则它不会与另一个客户端共享 cookie。正是这些 cookie 允许会话 ID 将浏览器中的两个选项卡识别为同一用户。

服务器是否可以检查这两个连接是否来自同一台机器?

并非完全基于连接本身。您可以确定它们是否可能是同一台计算机,但无法最终证明它们在没有其他帮助的情况下。

此类问题的通常解决方案是让用户使用您的服务创建一个帐户,并让每个连接提供一些登录信息或至少提供一些身份凭据,然后您可以使用这些凭据来识别哪些连接属于哪台计算机。对于桌面应用程序,创建此登录可以作为设置过程的一部分,然后可以将凭据保存在本地并自动使用。对于浏览器,用户可能必须第一次输入凭据,然后持久的 cookie 可以将它们保存一段时间。


这是另一个方案。

  1. 本地桌面应用程序或操作系统服务可以创建一个唯一 ID。这将是连接到计算机的外部自动化机器的serviceID
  2. 相同的本地服务将在允许 COR 请求的已知端口上运行一个 Web 服务器(假设它在端口 9333 上为例)。
  3. 然后本地浏览器可以通过连接到http://localhost:9333 来直接连接到本地服务以加载网页,然后直接从该网页控制它,或者它可以对http://localhost:9333/fetchID 进行Ajax 调用以获取本地服务的 ID,然后它在与您的主服务器的任何通信中使用它,这样就不会怀疑哪个服务在同一台计算机上。

【讨论】:

  • 感谢您的回答!是的!我还考虑在浏览器和服务中使用登录身份验证,以便更容易确定问题,我只是想弄清楚如果同一用户从两个浏览器登录是否可能存在问题两台不同的计算机,巧合的是,这两台计算机都有一个登录并运行的服务实例......你怎么看?
  • @user1990231 - 我不能告诉你这是否有问题。您必须告诉我,因为我不知道您的服务在做什么或后果是什么。您可以检测同一帐户上的不同 IP 地址,并防止可能会发现同一帐户在不同计算机上使用的许多(尽管不是全部)案例。
  • 是的,你说得对!关键是这个setvice将负责控制外部的自动化机器,想法是使用浏览器中运行的系统与服务器进行通信,服务器通过引用的服务与自动化机器进行通信。
  • @user1990231 - 为什么不让浏览器直接与本地服务进程通信?如果该服务在已知端口上运行本地 Web 服务器,那么浏览器可以直接连接到 http://localhost:nn,这是毫无疑问的。
  • 我可以使用一个单独的套接字让浏览器按照你所说的与服务通信,这不会有问题,但是当机器完成它的工作时,服务需要将结果发送到服务器进行计算,服务器需要将此计算的结果发送给客户端查看。这就是我需要确定来自同一台机器的套接字是什么的原因,以便服务器知道他需要将结果发送回哪个套接字。但是你的建议给了我一个想法……
猜你喜欢
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多