引言
昨天,****在微博上发布了一条消息,披露某个黑客组织已经成功入侵了某软件服务器,并成功拿下某软件公司的后台管理系统,使得黑客组织可以访问并控制任何安装了某软件的客户端。还发布了应对措施,且要求近期不要使用该软件,核查该事件对企业带来的影响,发生安全事件及时上报。这一重磅消息一经发出,在互联网上虽不能说炸开了锅,也算掀起了不小的波澜。随后,湖南省信息安全中心也发布了安全漏洞预警,措辞虽没有****严厉,但也要求用户卸载软件并关闭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操作系统自带的远程桌面实现远程控制。这种解决办法是成本最低,也是最容易实现的,性价比最高的。绕过了实现思路中第一种方法的技术壁垒。

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

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

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信胜区。

C# WinForm 跨线程访问控件(实用简洁写法)的更多相关文章

  1. winform跨线程访问控件

    首先说下,.net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性.所以除了控件所在的线程外的线程调用会抛异常 (Cross-thread operation not va ...

  2. C# WinForm 跨线程访问控件

    问题出现: 在WinForm 处理多线程访问主线程的控件时候,就会出现如图所示的错误对话框:    解决方案:  方案一:去掉线程访问主线程UI控件的安全检查,使用: Control.CheckFor ...

  3. C#之Winform跨线程访问控件

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它.此时它将会在内部调用ne ...

  4. C# WinFrom 跨线程访问控件

    1.跨线程访问控件委托和类的定义 using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summ ...

  5. c#使用MethodInvoker解决跨线程访问控件

      功能函数测试集锦(77)  C#专区(114)  版权声明:本文为博主原创文章,未经博主允许不得转载. .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线 ...

  6. C# 关于跨线程访问控件问题

    跨线程访问控件问题的原因是:控件都是在主线程中创建的,而系统默认控件的修改权归其创建线程所有.在子线程中如果需要直接修改控件的内容,需要使用委托机制将控件的修改操作交给主线程处理.因此,当没有使用委托 ...

  7. C# 跨线程访问控件(MethodInvoker)

    参考:https://www.cnblogs.com/lvdongjie/p/5428815.html .Net 通常禁止跨线程访问控件,设置Control.CheckForIllegalCrossT ...

  8. Winform之跨线程访问控件(在进度条上显示字体)

    此文章对于遇到必须使用线程但是没有办法在线程内操作控件的问题的处理  有很好的解决方案(个人认为的.有更好的方案欢迎交流.) 在做跨线程访问之前我们先了解下我们所做的需要达到的效果: 这个是批量的将x ...

  9. c# winform InvokeRequired 解决跨线程访问控件

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. Windows 窗体中 ...

随机推荐

  1. MySql连接笔记

    一.内连接查询  inner join 关键字:inner  join   on 语句:select * from a_table a inner join b_table b on a.a_id = ...

  2. Mybatis系列(四)注解

    Mybatis系列(四)注解 1.pom.xlm: <?xml version="1.0" encoding="UTF-8"?> <proje ...

  3. innobackupex备份参数slave-info、safe-slave-backup

    mysql物理备份用的比较多的是innobackupex命令,备份常用,但对于里面的两个参数slave-info.safe-slave-backup一直搞的不太明白,今儿亲测了一下. 先解释一下参数意 ...

  4. Flink1.9整合Kafka

    本文基于Flink1.9版本简述如何连接Kafka. 流式连接器 我们知道可以自己来开发Source 和 Sink ,但是一些比较基本的 Source 和 Sink 已经内置在 Flink 里. 预定 ...

  5. 亮剑.NET第二章

    第二章主要讲解C#中各种让人模糊不清的概念,用法,类型等等. 1.Equals()与==区别 当比较两个值类型时,二者基本一致,当比较引用类型时,==比较的是引用类型的地址是否一致,即两个引用是否指向 ...

  6. Day 13 linux 的输入输出与管道的使用

    1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中.比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中.这样第二天通过查看文件的内容就知道昨天备份 ...

  7. PTA A1013

    第七天 A1013 Battle Over Cities (25 分) 题目内容 It is vitally important to have all the cities connected by ...

  8. JsonConvert 转DateTime类型为json 带T

    在调用接口的时候  将Model转换成json Datetime类型多了个T 用的是Newtonsoft.Json.dll 版本v4.5.0.0 代码:paramsjson = JsonConvert ...

  9. Docker Gitlab CI 部署 Spring Boot 项目

    目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...

  10. H5当弹出弹窗遮罩时如何阻止滚动穿透(使用css方式)

    最近的一个H5活动中有一个是点击[分享]弹窗指引遮罩弹窗引导用户进行分享,但突然发现弹出弹窗的时候下层仍然可以进行滑动,这个问题是个H5经久不衰讨论的问题,重点是我这个页面在安卓系统上有明显的滑动闪烁 ...