我正在用 C 语言为 Windows 编写一个类似服务器的小型程序(使用 MinGW/GCC,在 Windows 7 上测试),该程序最终应该作为本地系统帐户的服务运行。我正在创建一个套接字,并使用 Windows 套接字bind()
, listen()
and accept()
监听传入的连接。如果我从命令行运行应用程序(即不是作为服务,而是作为普通用户),则从外部 IP 连接到它没有问题。但是,如果我使用 LocalSystem 帐户将程序作为服务运行,我只能从我自己的 PC 连接到该服务,或者使用127.0.0.1
或我的本地地址,192.168.1.80
(我位于小型本地网络中的路由器后面)。即使不作为服务运行也没有问题,外部 IP 或同一本地网络中的其他 PC 使用我的本地地址现在都无法连接。
现在,我听说当作为 LocalSystem 或 LocalService 运行时,网络处理方式不同,甚至无法访问(?),或者服务无法同时访问桌面和网络(注意:我的服务不是交互式的),因为安全考虑。本质上,我需要找出出了什么问题/如何侦听服务中的连接。作为 NetworkService 运行与作为 LocalSystem 运行相同,但具有网络访问权限?当然必须有可以作为后台服务运行的服务器,那么它们是如何做到的呢?
UPDATE:看来关闭防火墙的建议是正确的——在 Windows 防火墙中添加例外后我可以获得连接。我想我没有考虑防火墙,因为当您正常使用套接字运行应用程序时,您会收到一条提示,要求添加例外,而首次运行服务时不会发生这种情况。有没有比手动将规则添加到防火墙更好的方法来处理此问题? LocalSystem 是否有权向防火墙本身添加规则,或者我必须在安装过程中以某种方式执行此操作?
LocalSystem 和 LocalService 帐户的网络登录权限受到限制,但据我所知,它不应该影响套接字连接。
但是,Windows 防火墙将处于活动状态,如果您将可执行文件移动到新目录以作为服务安装,它可能不再符合您为测试制定的规则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)