使用C/C++开发运维小工具(上:起因及思路)

2018-5-22 杰克 编程开发

    最近随着手上运维的Windows服务器越来越多,客户已不满足于仅收到操作系统被登录的短信告警提示,对运维工作有了新的要求。

    提出新的运维要求包括短信告警的内容需有:登录服务器所使用的用户名、终端的计算机名、终端私网IP(终端网卡IP)、终端公网IP(NAT后的IP)等信息。从需求来看,要实现以上信息并不复杂。使用之前我采用的VBS告警方式(参见:http://www.wj64.net/?post=13)增加命令:query user可以获取远程登录账户名、状态、登录时间等信息,增加命令:netstat -n | findstr "3389" 可以获取远程终端的公网IP信息。 

通过命令获取到的远程终端信息:

cmd.png

 

 终端计算机名可以通过任务管理器里面查看到,相信一定有类似的脚本或命令也能获取到,只是我暂时没找到

compute.png 

      考虑了一下,最后决定找人开发一个exe程序来实现以上信息的收集并发送邮件。在决定之前查询了微软MSDN的相关函数文档,要实现以上信息的获取需调用:WTSEnumerateSessions  WTSQuerySessionInformation   GetExtendedTcpTable 这三个函数即可

相关函数微软MSDN说明:

https://msdn.microsoft.com/en-us/library/aa383464(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/aa365928.aspx

至于邮件发送,网上早就有人将整套发送代码写出来并做成了类(搜素CSendMail),直接去CSDN下载下来使用即可

发送邮件类的原作者blog

https://www.cnblogs.com/sixbeauty/p/3983525.html  

      还有一个思路是通过读取服务器的安全日志也可以实现,但Windows的安全日志关于登录的事件ID是4624  同一个远程桌面登录会出现多个ID为4624的事件,有的显示终端计算机名,有的仅显示终端的公网地址,而且如果服务器是作为文件服务器或RDS服务器还会有大量的文件共享服务器登录及RDS登录日志。需要对日志文件进行不同信息的分类提取,信息获取并不准确

evt.png

 

      需求已经很明确了,后面就剩找人做出来了。在我的理解中调用几个API函数并使用一个已经写好的类来实现上述功能并不算太复杂,仅仅只是将相关代码做些修改并组合起来而已。预计一个成熟的程序员几个小时就能编写出来,然而事与愿违。

    首先,我找到一个比较有名的服务平台 www.zbj.com  提交了需求任务,但没人接单,只有人问可否用C#实现

zbj.png 

      在无人接单后,我觉得可能平台不行或者我给的价格过低(我并不了解这个市场行情),于是转向了一个老牌的任务平台( 据说该平台曾被央视报道) http://www.taskcn.com/  并把开发价格上升到1500.00  想来这回总有人接活了吧

      又等了一个星期,这次有人接单了。然而依旧是询问可否用C#开发。我不懂软件开发行业,难道C/C++都没人学了么?在我看来,C是基础语言连操作系统都是由它开发。由它写出的程序一定效率高,稳定可靠。

    软件商.png

      在某软件商给出了15000.00的价格都不一定能做出来的结果后,我决定自己编写。我对于C/C++的了解不多,编写的C程序仅限于“hello world”  会使用的开发环境是古老的Turbo C  不过没关系这些都不重要,我只要掌握解决问题的方法即可。对于程序需求,在我搜索了解了一些我需要的信息后,大致画了一个思维图。按照这个思维图去逐步实现我的代码

开发逻辑思维图:

思维图.jpg.jpg

 

标签: c/c++ 编程 运维 API函数

发表评论:

Powered by emlog 京ICP备17037512-1 e-mail:jackhkyin@163.com QQ:393147796