Sockets 识别源机器

Sockets 识别源机器,sockets,networking,websocket,server,Sockets,Networking,Websocket,Server,假设我有一个网站,它使用套接字连接与服务器通信。还有一个软件(可能是NOS服务,甚至是桌面软件),也可以与同一台服务器进行通信 服务器是否可以检查这两个连接是否来自同一台机器 我确实知道,如果两个套接字来自浏览器中的两个不同选项卡,则可以使用会话id,但如果一个套接字来自浏览器,我不知道如何处理,例如使用socket.io,另一个套接字来自桌面软件或O.s后台服务 谢谢 如果这些连接来自同一台计算机,则源IP地址很可能相同。计算机中必须有多个网络适配器,或者单独的代理路由,或者IP地址不相同的异

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

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

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


谢谢

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

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

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

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

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

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

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


这是另一个方案

  • 本地桌面应用程序或操作系统服务可以生成一个唯一的ID。该ID将是连接到计算机的外部自动化机器的
    serviceID
  • 同一个本地服务将在允许CORs请求的已知端口上运行一个web服务器(这里只说它位于端口9333上)
  • 然后,本地浏览器可以通过连接到
    http://localhost:9333
    加载一个网页,然后直接从该网页控制它,或者它可以对
    http://localhost:9333/fetchID
    获取本地服务的ID,然后在任何情况下使用该ID与主服务器进行通信,这样就可以毫无疑问地知道哪个服务在同一台计算机上

  • 我想,有太多可能的变化,无法确定。IP和MAC地址没有任何帮助(中间层、网关等),这使得在计算机上安装客户端证书成为可能(当有多个可能的客户端时有些不切实际,但如果您确实需要它,这可能是最好的选择)。@Myst感谢您的回答,我喜欢查找客户端证书的选项。在处理许多可能的客户机时,是什么原因使它变得不切实际?我可能对它的实际/不切实际程度有误解,但当有许多可能的客户机共享一台机器时,控制证书安装和强制使用证书会变得更难。@Myst Nice。谢谢!我去看看!谢谢你的回答!是 啊我还考虑在浏览器和服务中使用登录身份验证,以便更容易确定问题,我只是想弄清楚,如果同一个用户从两台不同的计算机登录到两个浏览器,并且碰巧这两台计算机在每台计算机上都登录并运行了一个服务实例,是否会出现问题。。。你觉得怎么样?@user1990231-我不能告诉你这是否是个问题。你必须告诉我,因为我不知道你的服务在做什么,也不知道这会带来什么后果。您可以在同一个帐户上检测不同的IP地址,并防止在不同的计算机上使用同一帐户的许多(尽管不是全部)情况发生。是的,您说得对!关键是,此设备将负责控制外部自动化机器,其思想是使用浏览器中运行的系统与服务器通信,服务器通过引用的服务与自动化机器通信。@user1990231-为什么不让浏览器直接与服务器通信本地服务流程?如果该服务在已知端口上运行本地web服务器,则浏览器只需连接到
    http://localhost:nn
    毫无疑问。正如您所说,我可以为浏览器使用单独的套接字与服务进行通信,这不会有问题,但当机器完成工作时,服务需要将结果发送给服务器进行计算,服务器需要将计算结果发送给客户端进行查看。那';原因我需要识别来自同一台机器的套接字,以便服务器知道需要将结果发送回哪个套接字。但是你的建议给了我很大的帮助