Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts in 2024.6


从双分发的视角看访问者模式

在23种经典设计模式中,Visitor模式可能是比较难理解的几个模式之一,之前在C#设计模式之访问模式这篇文章中渐进式的介绍了Visitor设计模式。恰巧最近看的《C++语言设计与演化,简称D&E》这本书中提到了一个单分派和双分派的概念,这里从前文介绍的C++中的虚函数表以及动态分发即单分发的基础上,介绍双分发以及基于双分发的Visitor设计模式,试着从另外一个角度来看访问者这一经典的设计模式,最后对比了通过工厂方法和访问者模式的异同。 …

Design Pattern Double Dispatch single dispatch visitor vtable factory

Math.Round中MidpointRounding各种枚举值的区别

通常,在保留n位小数进行四舍五入的时候,会用到Math.Round方法,但默认的这个Round方法的实现可能与我们平常想象的不一样,在很早之前我就知道有这个差别,今天重新整理一下。简单来说,Math.Round方法除了提供了第二个保留小数位数的参数之外,还有一个名为MidpointRounding的枚举类型参数,这个参数在.NET Framework 4.8及.NET Core 3.0版本之前,只提供了两个Round nearest类型枚举值: ToEven和AwayFromZero。这两个值的区别只在于当遇到中值5时的舍入问题。在.NET Core 3.0及之后的版本中,又引入了三个枚举值:ToZero、ToNegativeInfinity和ToPositiveInfinity这三个值,这个三个值解决了是直接舍掉、整体向下还是整体向上舍入的问题。 …

MidpointRounding Round

通过程序判断和阻止来自特定IP地址的远程桌面连接攻击

由于工作原因,偶尔需要在家里远程连接到公司计算机上处理一些工作事宜。因为公司的电脑是在一个局域网内的,并没有对外暴露IP地址,所以一般的做法就是通过第三方软件比如TeamView、向日葵这类软件来提供支持,但这些第三方软件经常会爆发一些安全事件,且把电脑交给第三方软件其实也存在安全隐患。不使用第三方软件,通用的做法就是在路由器上将外网IP地址和特定的端口转发到特定内网IP地址的机器和端口上。这样通过外网IP地址和端口,就可以使用远程桌面的方式访问到内网的计算机,但在外网暴露特定端口是有风险的,尤其是对于远程桌面3369这样常用的端口,因为任何人都可以通过一些端口扫描工具进行连接,进而通过暴力的方式尝试登录。本文介绍了通过程序的方式自动监控这种RDP失败的登录,并在登录失败超过一定次数后,自动新建防火墙入站规则,并将疑似IP地址添加到规则中,从而防止来自这类IP地址的RDP攻击的进一步尝试。 …

RDP Block 3389