• C# / .net服务端程序,无法通过防火墙的真正坑爹原因


          把C#/.net写的服务端程序,丢到服务器里,然后用防火墙给这个程序设置白名单,这本来是很正常的操作步骤。问题是,.net程序,有些连接并不是由程序本身开的,而是由 System.exe 进程开的!!因此,无论你怎么给.net程序开防火墙白名单,都没木有作用滴。这坑爹的鸟设计啊..虽然这是为了端口复用,但完全可以把权限划给用户程序,为毛非得给System.exe,微软的开发者,设计模式没过关?

         事实上并非如此。微软之所以这样设计,是为了实现tcp端口复用。比如,IIS web网站的端口为80,然而,你用其他程序,为它做了一个js访问用的WebService。如果没有端口复用功能,由于IIS占了tcp 80端口,则你需要把WebService改为别的端口。但是,按照js跨域问题的定义,端口不同,是会引起跨域问题,造成拒绝访问的。所以,微软把监听的事情,交给System.exe去做,来实现端口复用,这样一来,WebService也可以监听80端口了。

        这货优点逆天,但大部分估计用不着。因此,这里还是给出防火墙解决方案:

            1.在防火墙里,还是需要给服务端程序,设置白名单的。但这种设置,是为了让该程序主动能外连到其他位置,也就是说,该程序为client,连接其他Server时,就需要这样设置。

            2.如果该程序还对外提供ServerSocket端口,则需要在防火墙的高级设置里面,通过指定的类型tcp/upd与端口号,来进行设置。这种设置是为了让该程序能接受外部的连入。

  • 相关阅读:
    类和对象
    数组
    循环结构
    选择结构
    变量,数据类型和运算符
    什么是JDBC,JDBC的使用
    重拾JavaScript
    git使用日记
    Base包
    RabbitMQ(windows环境)下载与安装
  • 原文地址:https://www.cnblogs.com/xxxteam/p/3036082.html
Copyright © 2020-2023  润新知