C# WinForm 跨线程访问控件(实用简洁写法)

时间:2023-12-29 23:01:38

引言
昨天,****在微博上发布了一条消息,披露某个黑客组织已经成功入侵了某软件服务器,并成功拿下某软件公司的后台管理系统,使得黑客组织可以访问并控制任何安装了某软件的客户端。还发布了应对措施,且要求近期不要使用该软件,核查该事件对企业带来的影响,发生安全事件及时上报。这一重磅消息一经发出,在互联网上虽不能说炸开了锅,也算掀起了不小的波澜。随后,湖南省信息安全中心也发布了安全漏洞预警,措辞虽没有****严厉,但也要求用户卸载软件并关闭5938端口临时处置。这一消息在互联上迅速传播,大型国企,医院等企事业单位,包抱民营企业,基本都在第一时间,对该事件进行了处置。毕竟安全无小事,加上最近流行的勒索病毒,搞得大家宁可信其有,不可信其无,纷纷卸载软件。但随后,****又删除了该条微博,某软件官方网站一直没有相关通告,让整个事件走向扑朔迷离。不管事件后继怎么发展,我们都希望某软件是安全的,强烈谴责黑客的行为,也感谢深****的提醒,时刻提防网络安全,共同维护网络安全环境。

技术探讨
某软件不失为一款优秀的远程控制软件,为广大用户工作和生活提供了方便,如果真的突然不能使用该软件,势必会对部分用户产生一定的影响。虽然也有相关替代的产品,如XT800,向日葵等,但从效率方面考量,笔者认为暂时都不如某软件强大,这也是某软件能在中国有如此巨大用户数量的原因。笔者最近发现AnyDesk软件基本和某软件性能相当,不过都是国外软件,且价格不菲,个人用户如果购买使用,还算有点小奢侈。
某软件到底使用了什么技术,这么小的一个软件,为何就没有一款国产的软件能够在性能上与之匹敌?笔者从事软件开发十多年,下面将从技术层面介绍一下远程控制软件实现的两种原理,不正之处欢迎指正。
第一种思路:
截屏 -> 网络传输 -> 显示。原理够简单吧,实现起来也够简单,但要做到好用,高性能,这里面就比较深了,具体实现的思路也较多。市面上大多数产品都是按这个思路来的,包括某软件,AnyDesk等优秀软件,也包含QQ远程协助。这种思路想要做得足够优秀,就必须找到一种高效低代价的方法,快速的获取屏幕变化区块,且仅传输变化的内容到对方进行显示。通常的做法都是从User32.dll入手,通过挂钩这些系统绘图函数实现,再解决那些使用DirectX技术的软件,因为使用了DirectX技术,绘制不再经过User32.dll,也就捕获不到相关绘制信息。还有一种方法就是实现虚拟网卡驱动,当然这种方法也是第一种思路中难度最高的,也是性能最好的,算是一劳永逸的解决方法,目前使用虚拟驱动实现的,也有很多。比如我们之所以能在虚拟机软件中看到桌面,就得益于虚拟网卡驱动的功劳。
第二种思路:
使用微软的Rdp协议。没有谁比微软更精通Windows的底层,Rdp协议发展到现在,已经相当成熟,不管从功能还是性能,可谓相当优秀了,连3D都支持了。Rdp协议相比前面的方法最大的差别就在于,它传输的,大部份不再是图片,而是绘图命令,仅传输极少数图片。 也就是说,客户端看到电脑桌面,是通过传输过来的命令绘制上去的,这样就节省了极大的带宽。而且可以磁盘映射,声音回传,打印机共享等高级功能,交互性强,实用性高。

替代方案
既然微软提供了这么优秀的功能,我们为什么不用?当然要用,在内网,或者有公网Ip的情况下,我们都在用,而且确实好用。Windows系统管理员对远程桌面工具一定不会陌生。其它情况下,对不起,用不了!有不有解决办法呢?有,先建VPN,再使用。算了,建VPN,太复杂了,普通用户根本不会。那还有不有其它办法?当然有,笔者已经实现了,而且稳定运行了很久,在需要的时候,这种解决方案从未放过我鸽子。
内网穿透 +远程桌面
之所有大多数用户在公司不能控制家里面的电脑,究其根本原因在于家里面的电脑设备处于NAT设备之后,NAT设备充当了一个硬件防火墙,形成了一个天然屏障,提供共享上网的便利,也阻止了那些不请自来的访问。特别是在IPV4地址枯竭之后,就算拨号上网,运营商分配给你地址,其实是一个内网地址,而非公网地址。这给那些会设置路由器端口转发的朋友,制造了不小的麻烦,在这种情况下想使用系统自带的Windows远程桌面,基本没有可能。
何为内网穿透?你可以简单的理解为可以从外网穿透NAT设备,直接访问你家里面的电脑。比如P2P下载软件,基本都使用了这一技术。实现原理也极为简单,简单解释为A电脑和B电脑分别处于两个不同的NAT设备之后,它们想要相互通讯。
第一种办法,就是让A和B分别和一个支点C建立连接,双向传输数据时,都先将数据转交给C,C再进行转发,此时C起到媒人的作用。但这种方法有一个弊端,就是当通讯的数目较多时,媒人会很忙,可能家门槛都会被踏破。实现起来,对C服务器的宽带要求就较高,当然解决办法就是增加支点C的数量和带宽,可以简单的理解为资源叠加吧,好处就是当一支点挂掉以后,还有其它支点继续服务。
第二种办法,媒人C介绍A与B认识,之后A与B直接通讯,与媒人C再无瓜葛,听上去无情,但却是最好的办法。这种方法,也是所有远程控制软件在网络情况允许的前提下,优先考虑和使用的方法。但现实往往是残酷的,这种需要硬件的支持,同时运营商也会*这种技术的实现,制造一些麻烦,这也是P2P下载软件被封杀的原因,原因是使用的人多了,可能造成局部路由或者交换设备瘫痪。
以上就是穿透NAT设备的两种方法,基本所有的远程控制软件,都综合使用到了这两种办法。其它诸如upnp技术,在此不再介绍,原理跟手动设置路由器转发功能一样。我们的解决思路,就是用内网穿透的办法去使用微软Windows操作系统自带的远程桌面实现远程控制。这种解决办法是成本最低,也是最容易实现的,性价比最高的。绕过了实现思路中第一种方法的技术壁垒。

软件实现
如果仅提供一个技术解决方案,而没有软件实现,总觉得还是空洞。虽然解决方案介绍得简单,毕竟实现起来,还是会碰到不小的麻烦,而且工作量也不会太少。按照上面的思路,笔者已经实现了,先看一张效果图吧,界面将就看,后期会不断的改进,欢迎关注!
C# WinForm 跨线程访问控件(实用简洁写法) C# WinForm 跨线程访问控件(实用简洁写法)C# WinForm 跨线程访问控件(实用简洁写法)

暂时别嫌它难看,干起活来,那叫一个麻利,干净利索,各项功能考虑得相当周到,虽然看起来还不成熟。好不好用,我说了不算,你说了才算。还是聊点技术,听了你就会觉得它很牛逼。

1>IOCP高并发技术
IOCP技术具有天生的优越性,相同的硬件配置,能够承载更多的TCP连接,消耗更少的资源。相比异步TCP,确实在并发量上有不小的突破。单台普通台式机,轻松负载20万个 TCP连接,别以为用了 IOCP就是高并发,其实这里面东西多着呢。IOCP主要用于解决媒人C的功能,让她多撮合几对。
2>负载均衡
你找媒人之前,得先找负载均衡,它负责管理媒人的,相当于一个中介机构,它会根据媒人的工作量,区域,给你找个最合适的媒人。
3>通道替换
A和B通讯的管道太慢了,给你换一根粗点的,让通讯更畅快一点。原理很简单,但必需做到两点,一是老水管的水滴水不漏,二是顺序都不能乱,一点不能乱。这两样一点没做对,全部报废。这个最难做,听起来简单,做起来特别麻烦。
4>通道漂移
A和B通讯,之前通过媒人C交换信息,媒人C生病了,不干了,全部工作交给媒人D来干。难度不次于通道替换。
5>内网穿透P2P
俗称的TCP打洞,实现媒人介绍后,两个人直接恋爱,抛弃媒人。别拿UDP打洞来比,没有可比性。网上做这个技术死得一堆一堆的。
6>动态压缩传输
小包压缩,小包解压,效率高。主要解决通过远程桌面持贝可压缩文件。未实现该技术,想要节约时间,你得先压缩再持贝,复制过去后再解压。现在不用了,直接持贝吧,底层
已经自己给你做好了,你只管复制粘贴,够贴心吧。
7>数据包加密
Rdp协议能搞懂,能拆开包的人不多,为了安全,再加密一次,保险了吧。
8>私有传输协议
底层的包既有RDP的数据,还得有我自己的控制包,为了在一个TCP连接里面传输两种包,得用协议把他们分开。可能理解通过协议实现通道复用,信道分离的感觉。你可以理解
为把几个TCP的数据,传输到这一个TCP,到达对等端后,再把数据分离出来,分别传输到对应的TCP通道里面去。
9>反向连接技术
这个最简单,也最好理解。公网不能主动连接介于NAT之后的设备,那就反过来,让NAT之后的设备主动连接公网的设备吧。其中稍有点难的就是心跳连接,你得把它做成打不死
的小强,中断之后持续连接直至成功。

贴心的小功能

一、远程文件管理功能
你不需要远程桌面连接就直接可以上传下载文件。其实很多时候,我们不需要操作或者控制电脑,我们只需要传输几个文件或者管理文件。另外一个现实的问题,就是很多堡垒机使用频次很高,我们尽量节约出时间让别人使用吧。不可能你要传输一个小时的文件,你就独占远程桌面一个小时。另外文件传输中,上传下载均实现了断开续传功能。
二、.权限管理
主帐户可以建立子帐户,可以授权计算机给他,这样他就有远程连接这台电脑的权限。员工离职后,直接收回权限或者删除帐户就可以了,没有后顾之忧。

安全性
基于WindowRdp协议,但安全性高于WindowsRdp协议。在管理服务的时候,为了管理方便,我们打开3389服务,你连接的同时,别人也能连接吧,猜不到的地址或者端口号,那我就扫吧,只要你开了,我总能扫到。之后,就有各种办法来尝试你的密码,再说,微软远程桌面服务还时不时的报出各种漏洞呢。用我这个方案,所有问题解决了。别把3389端口暴露出来,相当于门都关上了,你怎么破?此路不通!

软件安装与使用
安装:
绿色软件,不需要安装,复制到电脑上就可以了。软件分为两个端,主控端与被控端。被控端就是安装在被控机上面,如家里面的电脑,机房的服务器,总之你想控制谁,你
就安装被控端到哪。主控端,这个就好理解了,就是你控制被控机的工具。
注册:
打开主控端登录程序,点击注册用户,跟着指引,很容易就能完成注册工作。注册时需要手机号码接收验证码,手机号同时也是登录名,这样不容易忘记用户名。
登录:
用刚刚注册的帐号分别登录被控端和主动端,最好先登录被控端。此时主控端登录成功后,就可以在计算机列表面板里面,看到多了一台计算机,双击就会连接远程桌面,输
入登录密码,一切搞定。其它功能,就先不介绍了,稍微摸索一下,就会了。

软件下载 https://pan.baidu.com/s/15vJvn-NiMsUwXj5syPR35g 提取码:202o 备注:360可能会阻止软件,最好加入360信胜区。