文档章节

迷你软件制作

陈家栋
 陈家栋
发布于 2016/03/31 22:25
字数 1478
阅读 43
收藏 1

一、需求

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

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/

© 著作权归作者所有

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

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

xiaopei050
2018/06/27
0
0
电脑上被永久删除的文件如何恢复

   大家在使用电脑的时候是不是出现过这些问题,桌面文件使用快捷键删除、硬盘被格式化、电脑里面的文件被杀毒软件删除等情况,遇到对于自己很重要的文件在这样的情况我们都会焦急如焚。其...

qq5b693baba9285
2018/08/17
0
0
pcDuino–voip服务器设置呼叫彩铃

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

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

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

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

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

技术小胖子
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部