文档章节

迷你软件制作

陈家栋
 陈家栋
发布于 2016/03/31 22:25
字数 1478
阅读 42
收藏 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
06/27
0
0
pcDuino–voip服务器设置呼叫彩铃

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

pc朵拉
2013/07/03
0
0
电脑上被永久删除的文件如何恢复

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

qq5b693baba9285
08/17
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

没有更多内容

加载失败,请刷新页面

加载更多

09-利用思维导图梳理JavaSE-

09-利用思维导图梳理JavaSE-Java IO流 主要内容 1.Java IO概述 1.1.定义 1.2.输入流 - InputStream 1.3.输出流 - OutputStream 1.4.IO流的分类 1.5.字符流和字节流 2.InputStream类 2.1.File...

飞鱼说编程
24分钟前
1
0
Spring Cloud 微服务的那点事

在详细的了解SpringCloud中所使用的各个组件之前,我们先了解下微服务框架的前世今生。 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的功能,从而减少开...

我是你大哥
34分钟前
1
0
步步深入MySQL:架构->查询执行流程->SQL解析顺序

一、前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一...

Java干货分享
48分钟前
1
0
gson1.7.1线程并发导致空指针问题

java.lang.NullPointerExceptionat com.google.gson.FieldAttributes.getAnnotationFromArray(FieldAttributes.java:231)at com.google.gson.FieldAttributes.getAnnotation(FieldAttribut......

东风125
今天
3
0
以太坊RPC接口使用

以太坊RPC接口文档: https://github.com/ethereum/wiki/wiki/JSON-RPC#web3_clientversion 使用方式: 比如我要调用某个合约的balanceOf(address _owner)方法。 因为没有改变合约的状态,所以...

王坤charlie
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部