识别套接字源机器

时间:2018-01-29 14:08:37

标签: sockets networking websocket server

假设我有一个使用套接字连接与服务器通信的网站。还有一个软件(可能是一个n.S.S服务甚至桌面软件),它也与同一个服务器进行通信。

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

我知道,如果两个套接字来自浏览器中的两个不同选项卡,则可以使用会话ID ,但我不知道如果一个套接字来自例如,使用socket.io的浏览器,以及来自桌面软件或OS后台服务的另一个套接字......

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  

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

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

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

这是另一个方案。

  1. 本地桌面应用或操作系统服务可以输入唯一ID。这将是连接到计算机的外部自动化机器的serviceID
  2. 同一个本地服务将在一个已知端口上运行一个Web服务器(例如,这里只说它在端口9333上),它允许CORs请求。
  3. 然后本地浏览器可以通过连接到http://localhost:9333来加载网页直接连接到本地服务,然后直接从该网页控制它,或者它可以对{{1进行Ajax调用获取本地服务的ID然后它在与主服务器的任何通信中使用它,以便毫无疑问在同一台计算机上有哪些服务。