我正在使用C for Windows(使用MinGW/GCC,在Windows 7上测试)编写一个类似于服务器的小程序,最终应该使用LocalSystem作为服务运行帐户。我正在创建套接字,并使用Windows套接字bind()
,listen()
和accept()
侦听传入的连接。如果我从命令行运行应用程序(即不是作为服务,而是作为普通用户),我没有任何问题从外部IP连接到它。但是,如果我使用LocalSystem帐户作为服务运行该程序,则只能通过我自己的PC连接到该服务,或者使用127.0.0.1
或本地地址192.168.1.80
(我位于小型本地网络中的路由器后面)。即使在没有作为服务运行的情况下没有问题,使用本地地址的外部IP或同一本地网络中的其他PC也无法连接。Windows服务:在以LocalSystem身份运行时侦听套接字
现在,我听说在以LocalSystem或LocalService运行时,网络处理方式不同或甚至无法访问(?),或者服务无法访问桌面和网络(请注意:我的服务不是交互式)同时出于安全考虑。本质上,我需要找出发生了什么问题/如何监听服务中的连接。 NetworkService与LocalSystem一样运行,但具有网络访问权限?当然,必须有可以作为后台服务运行的服务器,那么他们如何做到这一点?
UPDATE:看来,建议关闭防火墙在正确的轨道上–我可以加入Windows防火墙的例外后的连接。我想我没有考虑防火墙,因为当你通常使用套接字运行应用程序时,会得到一个提示,要求添加一个异常,这在第一次运行服务时不会发生。手动添加规则到防火墙有没有更好的方法来处理这个问题? LocalSystem是否有权限将规则添加到防火墙本身,或者在安装过程中是否必须执行此操作?
我认为防火墙是一个更可能的罪魁祸首,试图把它关闭? –