文档章节

迷你软件制作

陈家栋
 陈家栋
发布于 2016/03/31 22:25
字数 1478
阅读 41
收藏 1
点赞 1
评论 0

一、需求

做个可执行文件,让用户在自己的机器上双击执行后,可以把以下信息发送到服务器:

1、  主机名

2、  CPU型号信息

3、  内存

4、  IP地址

5、  操作系统版本

6、  磁盘大小

7、  应用列表

服务器接收到这些数据之后,会将它们存储在数据库中,以便管理员进行查询。

二、环境介绍

服务器:使用Ubuntu14.04作为信息接收与信息处理的服务器。

客户端:支持win7win10win2008win2012

数据库:在服务器上使用python自带的sqlite3来保存数据,无用户名和密码,可以直接对数据库进行查询。

三、步骤

1、制作客户端程序

1)安装psutil模块

该模块用于提取终端信息。具体安装如下:

#先安装pip
C:\Users\SoSoul>python -m pip install --upgrade pip
#用pip安装psutil
C:\Users\SoSoul>python -m pip install psutil

        2dataTransfer.py

主要用途:主要用于将用户终端的信息发送给服务器。用pickle将信息存储,并且通过socketpickle文件中的二进制内容发送到服务器上。

实现代码:

import pickle
import extractInfoWin
from socket import *
 
#extract host information and write them to file using pickle
endpointInfo = extractInfoWin.finalAllInfo()
endpointFile = open('ep.pkl', 'wb')
pickle.dump(endpointInfo, endpointFile)
endpointFile.close()
 
#send information to the server
serverIP = '10.33.140.76'
serverPort = 8888
sockobj = socket(AF_INET, SOCK_STREAM)
sockobj.connect((serverIP, serverPort))
 
endpointFile = open('ep.pkl', 'rb')
msg = endpointFile.read(1024)
while msg:
         sockobj.send(msg)
         msg = endpointFile.read(1024)
endpointFile.close()
sockobj.close()

        3extractInfoWin.py

主要用途:主要用于提取用户终端的信息。

实现代码:

import sys 
import os  
import atexit 
import time  
import psutil  
import socket
import cpuinfo
import platform
from winreg import *
 
def getHostname():
    return socket.gethostname()
 
def getCPUModel():
    s = cpuinfo.finalResult().split(':')[1]
    return s
   
 
def getMemorystate():  
    phymem = psutil.virtual_memory() 
    line = ("Memory: %s"%(str(int(phymem.total/1024/1024))+"M"  )).split(':')[1]
    return line
 
def getlocalIPs():
    hostname = socket.gethostname()
    IPinfo = socket.gethostbyname_ex(hostname)
    allIP = IPinfo[2]
    return allIP
 
def getOSVersion():
    return platform.platform()
 
def getDiskInfo():
    total = 0
    for x in ('a','b','c:','d:','e:','f:','g','h','i','j'):
        try:
            s = str(psutil.disk_usage(x))
            s = s.split(',')[0]
            s = s.split('=')[1]
            size = int(s)/1024/1024/1024
            total = total+size
        except:
            continue
    return str('%.2f' % total)+'G'
 
def getSoftware():
    #print('Installed Softwares:')
    aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
    aKey = OpenKey(aReg, r"SOFTWARE")
    softwarelist = []
    for i in range(1024):
        try:
            softwarelist.append(EnumKey(aKey,i))
        except:
            break
    CloseKey(aKey)
    CloseKey(aReg)
    #print(softwarelist)
    return softwarelist
 
def finalAllInfo():
    hostInfoMap = {}
    keylist = ['Hostname','CPU','Memory','IP','OSversion','Disk','AppList']
    valuelist = []
    valuelist.append(getHostname())
    valuelist.append(getCPUModel())
    valuelist.append(getMemorystate())
    valuelist.append(getlocalIPs())
    valuelist.append(getOSVersion())
    valuelist.append(getDiskInfo())
    valuelist.append(getSoftware())
    hostInfoMap = dict(zip(keylist, valuelist))
    return hostInfoMap

        4cpuinfo.py

主要用途:主要用于提取用户终端的CPU型号信息。

实现代码(本代码摘自网上,最后添加了一个返回信息的函数):

       注意: 由于本模块过大,所以等会提供下载链接!

2、制作服务器端程序

1dataProcessServer.py

主要用途:主要用于接收用户终端发送过来的信息,并且将这些信息存储到数据库中。

实现代码:

from socket import *
import pickle
import sqlite3
 
serverIP = '10.33.140.76'
serverPort = 8888
sockobj = socket(AF_INET, SOCK_STREAM)
sockobj.bind((serverIP, serverPort))
sockobj.listen(10)
 
conn = sqlite3.connect('endpointDatabase')
curs = conn.cursor()
tblcmd = 'create table endpointInformation(hostname char(50), hostIP char(80), CPU char(80), OSVersion char(30), Memory char(15), DiskInfo char(20),AppList char(200))'
curs.execute(tblcmd)
 
while True:
    i = 1
    connection, address = sockobj.accept()
    print('Server Connected by', address)
    clientFile = open('client'+str(i)+'.pkl','wb')
    data = connection.recv(1024)
    while data:
        clientFile.write(data)
        data = connection.recv(1024)
    clientFile.close()
    clientFile = open('client'+str(i)+'.pkl','rb')
    information = pickle.load(clientFile)
    clientFile.close()
    curs.execute('insert into endpointInformation values (?, ?, ?, ?, ?, ?, ?)', (str(information['Hostname']), str(information['CPU']), str(information['Memory']), str(information['IP']), str(information['OSversion']), str(information['Disk']), str(information['AppList'])))
    conn.commit()
    print(information)
    connection.close()
    i += 1

2)testdatabase.py

主要用途:用于测试服务器生成的数据库信息。用select语句获取数据库中的所有信息。

实现代码:

import sqlite3
 
conn = sqlite3.connect('endpointDatabase')
curs = conn.cursor()
curs.execute('select * from endpointInformation')
print(curs.fetchall())

3、将客户端程序制作成可执行程序

        1py2exe

据说这是一个非常经典的将py文件转换为exe文件的工具,但是对python 的版本限制比较严,而且有bug,不用。

        2cx_Freeze

据说这是一个比py2exe好用的转换工具,但是对版本限制也比较严,也有bug,不用。

3)pyinstaller

这就是本次所用的转换工具,应该是支持任何python版本,并且转换工作和前两者相比相当简单。

#下载安装pyinstaller:
D:\000 myDoc\08 提取用户信息\forWindows>python -m pip install --upgrade pyinstaller
#对py文件进行转换:
D:\000 myDoc\08 提取用户信息\forWindows>pyinstaller dataTransfer.py

下面的链接提供了我自己录制的视频、完整的代码、使用文档、可执行文件,有兴趣的哥们可以自己down下来研究研究:

https://yunpan.cn/cqccZYAjsjurb  访问密码 3e63

土豆网上也有我的视频哦,后续提供链接。

四、使用教程

1、服务器

要先在服务器上开启服务。

如下图所示,在服务器上只需要切换到程序所在目录,执行即可:

2、客户端(以win2008为例)

将压缩文件解压:

双击可执行文件:

客户端操作完毕。

3、现象

服务器控制台会有回显信息。

使用python脚本查询服务器数据库:


4、数据库

本次使用的sqlite3Python内置的数据库,可以用python语句直接访问,没有用户名和密码。

使用如下键值列表:

keylist = ['Hostname','CPU','Memory','IP','OSversion','Disk','AppList']

它们都是char类型,改数据库具体创建如下:

create table endpointInformation(hostname char(50), hostIP char(80), CPU char(80), OSVersion char(30), Memory char(15), DiskInfo char(20),AppList char(200))

-

下面的链接提供了我自己录制的视频、完整的代码、使用文档、可执行文件,有兴趣的哥们可以自己down下来研究研究:

https://yunpan.cn/cqccZYAjsjurb  访问密码 3e63

土豆网上也有我的视频哦,下面是链接:

http://www.tudou.com/programs/view/8d-JzM8DaxQ/

© 著作权归作者所有

共有 人打赏支持
陈家栋
粉丝 1
博文 12
码字总数 5545
作品 0
海淀
Microsoft Excel 2010--迷你图

迷你图是EXCEL2010中加入的一种全新的图表制作工具,它以单元格为绘图区域,简单便捷的为我们绘制出简明的数据小图表,方便的把数据以小图的形式呈现在读者的面前,它是存在于单元格中的小图...

xiaopei050
06/27
0
0
pcDuino–voip服务器设置呼叫彩铃

首先需要几个工具,第一个txtvoice 第二个,音频转换软件 首先需要制作一段定制的彩铃。 在txtvoice里面输入: pcDuino是一款由美国技术团队研发新型学习开发板,被誉为“增强版树莓派(Ras...

pc朵拉
2013/07/03
0
0
AI 制作超像真人讲话,假新闻必无可避?

随着 Facebook 等平台进一步打击虚假资讯,使假新闻成为广受各界关注的问题,AI 等技术日渐成熟,网络假新闻也越来越难以分辨。Jordan Peele 和 BuzzFeed 携手制作一条伪造的政府公告,片段中...

Unwire HK
04/20
0
0
Office 2010 新特性 (二) Excle 2010

跟前一版本一样,作为 Microsoft Office 2010 产品中的一个重要组件,Excel 2010 较 Excel 2007 来说也有很多改进,但总体来说改变不大。下面来做详细介绍: 全新的界面 在整体界面方面,Exc...

技术小胖子
2017/11/09
0
0
关于手机游戏引擎问题

关于手游 迷你忍者(mini ninjas) ios或安卓版本 用的是什么游戏引擎? 有大神知道吗? 这种手游小弟觉得画面做得很好,请教下怎么制作这种画面的手游了? 谢谢!!

zy520025
2014/03/06
147
0
“龙芯杯”中国科学院全国开源软件大赛进行中

开源中国社区讯:“龙芯杯”中国科学院全国开源软件大赛正在进行中,并向各开源组织或个人发起参赛邀请函。主要参赛者对象:高校学生、开源社区、独立个人或团队、开源企业。 参赛作品条件:...

老枪
2010/08/17
860
8
知名压缩软件“快压”传播病毒和多款流氓软件

  一、概述   日前,火绒安全团队发现,知名压缩软件“快压”正在传播木马病毒“Trojan/StartPage.ff”,该木马病毒会劫持被感染电脑浏览器首页;此外,“快压”还会推广其他流氓软件,其...

FreeBuf
07/17
0
0
手掌般大小的台式 PC 联想 ThinkCentre Tiny 评测

你印象中的小型台式电脑是怎样的?采用超薄主机?还是一些ITX准系统?而ThinkCentre Tiny系列电脑可能会颠覆你对台式PC的印 象,因为它只有巴掌般大小,而且只有高尔夫球直径那么薄。而使用这...

oschina
2012/11/02
5.3K
35
用Raspberry Pi和乐高打造廉价超级计算机

南安普顿大学教授Cox和他六岁大的儿子在乐高超级计算机前合影 在普罗大众的眼里,超级计算机和F1方程式赛车一样是梦幻性能和天价投入的组合,是骨灰级发烧友做梦都不敢奢望的顶级机器。超级计...

刘朝阳
2012/09/25
0
0
小企业用的财务记账软件

目前在整个财务记账软件中,被广泛熟知的是金蝶和用友两大品牌,用友和金蝶分列财务软件领域的前两把交椅,也不缺乏后起之秀4fang财务软件和RFC云财务软件。在所有的财务记账软件中,有点提供...

石沉大海
2016/11/11
56
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 2.18版本发布:支持Git协议v2,提升性能

Git 2.18版本发布:支持Git协议v2,提升性能Git 2.18版本发布:支持Git协议v2,提升性能 新版本协议的主要驱动力是使 Git 服务端能够对各种 ref(分支与 tag)进行过滤操作。 这就意味着,G...

linux-tao
25分钟前
0
0
python浏览器自动化测试库【2018/7/22-更新】

64位py2.7版本 更新 document_GetResources 枚举页面资源 document_GetresourceText 获取指定url的内容 包括页面图片 下载地址下载地址 密码:upr47x...

开飞色
41分钟前
28
0
关于DCL双重锁失效及解决方案

关于DCL双重锁失效及解决方案 Double Check Lock (DCL)实现单例 DCL 方式实现单例的优点是既能够在需要时才初始化单例,又能够保证线程安全,且单例对象初始化后调用getInstance方法不进行...

DannyCoder
47分钟前
0
0
PowerDesigner 16.5 安装配置

PowerDesigner16.5破解版是一款业内领先且开发人员常用的数据库建模工具,PowerDesigner可以从物理和概念两个层面设计数据库,方便用户制作处清晰直观的数据流程图和结构模型,欢迎有需要的朋...

Gibbons
今天
0
0
mac Homebrew 指令积累

1通用命令 brew install [包名] //安装包 brew list //列举安装的包 brew info [包名] // 显示安装包的详细信息 mysql 相关 #启动mysql 服务 brew service start mysql my...

Kenny100120
今天
0
0
前端Tips: 创建, 发布自己的 Vue UI 组件库

创建, 发布自己的 Vue UI 组件库 前言 在使用 Vue 进行日常开发时, 我们经常会用到一些开源的 UI 库, 如: Element-UI, Vuetify 等. 只需一行命令, 即可方便的将这些库引入我们当前的项目: n...

ssthouse_hust
今天
1
0
大数据教程(2.13):keepalived+nginx(多主多活)高可用集群搭建教程【自动化脚本】

上一章节博主为大家介绍了目前大型互联网项目的keepalived+nginx(主备)高可用系统架构体系,相信大家应该看了博主的文章对keepalived/nginx技术已经有一定的了解,在本节博主将为大家分享k...

em_aaron
今天
5
0
Git 2.18版本发布:支持Git协议v2,提升性能

在最新的官方 Git 客户端正式版2.18中添加了对 Git wire 协议 v2 的支持,并引入了一些性能与 UI 改进的新特性。在 Git 的核心团队成员 Brandon Williams 公开宣布这一消息前几周,Git 协议 ...

六库科技
今天
0
0
Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
今天
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部