import win32api
import win32con

class AutoRun:
"""
itemname:要添加的项值名称 ,
path:要添加的exe路径绝对路径
"""

def __init__(self, itemname="xx软件名称", path="d:\\xx软件.exe"):
# 注册表项名路径
RegKeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, RegKeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, itemname, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)

except Exception as e:
print(e)

if __name__ == '__main__':
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.servers import FTPServer
from pyftpdlib.handlers import FTPHandler

import socket
import os
import json
import sys

try:
hostname = socket.gethostname()
hostnameip = socket.gethostbyname(hostname)

# 从外部文件读取路径/端口/权限设置
ftppath = os.getcwd() + "\\ftpconfig.ini"
if os.path.exists(ftppath):
fjson = open(ftppath, "r")
js = json.load(fjson)

ftproot = str(js["根目录"])
try:
if not os.path.exists(ftproot):
os.makedirs(ftproot)
except Exception as err:
print(err)

ftpport = js["端口"]

ftpusers = js["用户集合"]

# 实例化虚拟用户
authorizer = DummyAuthorizer()

# 添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限)
authorizer.add_user('hostname', 'hostname', ftproot, perm='elradfmwMT')
for ir in ftpusers:
username = str(ir["用户名"])
pwd = str(ir["密码"])
permx = str(ir["权限"])
if permx.upper() == "A": # 所有权限
permx = "elradfmwMT"
if permx.upper() == "W": # 只读
permx = "adfmwMT"
if permx.upper() == "R": # 只写
permx = "elr"
authorizer.add_user(username, pwd, ftproot, perm=permx)

# 添加匿名用户 只需要路径
try:
ftproot += "/anonymous"
if ftproot.find(":") > -1:
ftproot = ftproot.replace("/", "\\")
if not os.path.exists(ftproot):
os.makedirs(ftproot)
authorizer.add_anonymous(ftproot)
except Exception as err:
print(err)

# 下次开机自启动
AutoRun("自制FTP服务器", sys.argv[0])

# 初始化ftp句柄
handler = FTPHandler
handler.authorizer = authorizer
# handler.decode()

# 监听ip 和 端口
server = FTPServer((hostnameip, int(ftpport)), handler)

# 开始服务
server.serve_forever()

except Exception as errinfo:
print(errinfo)

{
"说明": "端口:尽量使用大的;根目录:是绝对路径需要使用\\,相对路径只用/就行",
"端口": 2021,
"根目录": "E:\\FTP-ARCHER-ROOT",
"用户集合": [
{
"用户名": "mkx",
"密码": "00",
"权限": "a"
},
{
"用户名": "mkx1",
"密码": "00",
"权限": "w"
},
{
"用户名": "mkx2",
"密码": "00",
"权限": "r"
}
]
}
 

特别注意:

1.pyftpdlib内部使用utf8,而windows使用gbk,可以将pyftpdlib进行修改:
filesystems.py 将所有的utf8 换成 gbk
handlers.py 将所有的utf8 替换成 gbk
重新执行cmd即可: python -m pyftpdlib -p 21

2.由于端口出现跟其他程序共用情况,只要保证ftpw服务器程序管理员身份运行即可(win10常见)

客户端访问:

import ftplib
fp = ftplib.FTP()
fp.encoding = "gbk"
fp.connect("192.168.x.xx", 2021)
fp.login("username","pw")
x = fp.nlst()#所有文件
y = fp.dir()#文件夹
print(x)

python 搭建自启动FTP服务器,编译后exe后个人随时可用,非常方便的更多相关文章

  1. 一把鼻涕一把泪 搭建公网ftp服务器

    至于为什么要搭建公网ftp服务器,就当我心血来潮吧. ftp开源工具很多,咱用的是filezilla服务器.后来为了方便搭建web服务器,就改成了集成工具xampp.客户端工具也是filezilla ...

  2. 在Linux中搭建一个FTP服务器

    在Linux中搭建一个ftp服务器,以供两个工作小组保管文件使用.禁用匿名.第一个小组使用ftp账号:ftp1,工作目录在:/var/ftp/ftp1:第二个小组使用ftp2,工作目录在:/var/f ...

  3. Linux中搭建一个ftp服务器详解

    来源:Linux社区  作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道:控制通道 , 数据通道在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种 ...

  4. 解决FTP服务器上中文名文件下载后为空的问题

    转: 解决FTP服务器上中文名文件下载后为空的问题 2017年07月20日 15:19:21 代码的寂寞 阅读数 2428  版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  5. 使用FileZilla Server轻松搭建个人FTP服务器

    Linux平台下快速搭建FTP服务器 服务器FTP Server环境搭建 针对以上遇到的问题的解决方案如下: 1)如何上传文件到云服务器上          关于这个问题,我首先想到的是使用FileZ ...

  6. linux中搭建公网ftp服务器

    Linux搭建ftp服务器汇总整理 一.检查linux中是否已经安装vsftpd服务端软件 rpm -qa |grep vsftpd 二.卸载linux中的vsftpd服务端软件 rpm -e vsf ...

  7. Windows10搭建本地ftp服务器

    首先要有一个win10专业版的操作系统,连接上互联网... 一.首先打开控制面板选择程序,再选择"启用或关闭windows功能" 二.在"Windows功能"中 ...

  8. 【Linux搭建创建FTP服务器】---完美解决 - 费元星

    配置大红字文件置顶:   vsftp d.conf 4.5KB     useradd -d /home/bai_du -s /sbin/nologin bai_du 修改访问权限: usermod ...

  9. python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小

    本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类似Windows如下功能: 模块介绍: from ftplib import F ...

  10. go编译成exe后,打开出现闪退问题

    今天博主编译了一个go小脚本,编译完成后用自己电脑试了一下没有问题 然而,当换了一台电脑后,一样是win7系统64位,出现了闪退 于是乎博主疯狂百度 看到网上说   入口文件 的顶部改成  packa ...

随机推荐

  1. 巧用Fiddler开启运营商定制版路由器被阉割的功能,免去刷公版固件的风险

    前言: 三大运营商都有自己的定制版路由器,一般会在自家营销活动中作为赠品送给用户 正巧我家里就有两台电信定制版的华为路由器,都是这两年双十一在某宝上买宽带时送的 两台路由器型号分别是TC7001和TC ...

  2. python之路48 django 视图层、模板层

    视图层之必会三板斧 用来处理请求的视图函数都必须返回HttpResponse对象 完全正确 class HttpResponse: pass return HttpResponse() def ren ...

  3. python之路29 网络编程基础2之 两种架构 传输层常见协议 socket模块

    软件开发架构 1.C/S架构(Client:客户端和Server:服务端) 服务器-客户机,即Client-Server(C/S)结构.C/S结构通常采取两层结构.服务器负责数据的管理,客户机负责完成 ...

  4. visualstudio2017 community版本,有点失去信心了,同样两行代码,外观看不出任何区别,但是一个报错

    不多废话,先上代码 注意查看函数fputs_FILE,该函数的两行代码fopen_s是同样的,但事实上: 第一条fopen_s执行起来会报错,但是第二条就不会!!! /* 练习:获取用户键盘输入,写入 ...

  5. 数论专项复习(一)扩展欧几里得算法(exgcd)

    简介 扩展欧几里得算法(简称扩欧,exgcd),用来求下列方程的一组解: \[ax+by=(a,b) \] 算法介绍 1. 裴蜀定理 裴蜀定理(Bézout's lemma):若 \(a\in \ma ...

  6. appium如何连接多台设备

    我们在做app自动化的时候,若要考虑兼容性问题,需要跑几台设备,要是一台一台的跑比较耗 时,因此需要考虑使用多线程来同时操作多台设备. 1.我们拿两台设备来模拟操作下,使用:adb devices查看 ...

  7. 加速 Document AI (文档智能) 发展

    在企业的数字工作流中充满了各种文档,包括信件.发票.表格.报告.收据等,我们无法自动提取它们的知识.如今随着文本.视觉和多模态人工智能的进步,我们有可能解锁这些知识,这篇文章向你展示了你的团队该如何使 ...

  8. vscode快速删除空白行方法

    1.快速打开替换界面,在Find界面输入^\s*(?=\r?$)\n 2.Alt+R选择Use Regular Expression(Alt+R)即正则表达式模式: 3.选择Replace All(C ...

  9. DQL_排序查询-DQL_聚合函数

    DQL_排序查询 排序查询 语法: order by 子句 order by 排序字段1  排序方式1 ,  排序字段2  排序方式2 ,  排序字段3  排序方式3   ..... 排序方式 : A ...

  10. Java 进阶P-8.15

    对象串行化 ObjectInputStream类 readObject() ObjectOutputStream类 writeObject() Serializable接口 对象的寿命通常随着生成该对 ...