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. try catch finally,try里有return,finally还执行么?

    执行,并且finally的执行早于try里面的return: 结论: 1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: ...

  2. 写出单个字符到文件-flush方法和close方法的区别

    写出单个字符到文件 flush方法和close方法的区别 因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中.但是关闭的流对象,是无法继续写出数据的.如果我们既想写出数据,又想继续使用流,就 ...

  3. Spring Security Form表单认证代码实例

    Spring Security Form表单认证 Spring Security中,常见的认证方式可以分为HTTP层面和表单层面,如下: HTTP基本认证 Form表单认证 HTTP摘要认证 Spri ...

  4. C#代码整洁之道读后总结与感想

    1. 基本信息 C#代码整洁之道:代码重构与性能提升 ,英文名为Clean Code in C#. 作者:[英] 詹森·奥尔斯(Jason Alls) 著,刘夏 译 机械工业出版社,2022年4月出版 ...

  5. 容器镜像仓库-Harbor的安装及踩坑

    之前实验室的师兄让我帮忙给服务器上装一个Harbor,花了不少时间,遂记录之,以避坑. 在学习使用Harbor之前,需要了解Docker的使用,可以看看我之前的博客:应用容器引擎-Docker.Doc ...

  6. 12月19日内容总结——Q查询进阶、ORM查询优化、ORM事务、ORM常用字段类型和字段参数、Ajax介绍、数据编码格式、Ajax携带文件数据

    目录 一.Q查询进阶操作 二.ORM查询优化 三.ORM事务操作 四.ORM常用字段类型 五.ORM常用字段参数 六.Ajax AJAX简介 应用场景 AJAX的优点 语法实现 七.数据编码格式(Co ...

  7. Selenium CHANGELOG[最新版本4.8.0 计划中]

    Selenium CHANGELOG[持续更新] 源文件 https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES 搬运工 对重点版本做 ...

  8. 一个通用的 java 项目的模板

    #!groovy def oper_checkout(SCM_TYPE,SCM_URL,SCM_AUTH_PASS,SCM_BRANCH=' ',SCM_AUTH_USER=' '){ if (SCM ...

  9. python学习第一周总结

    第一周内容概要 day01 typora软件安装 markdown语法 typora软件功能介绍 网络博文编写教程 计算机的本质 计算机的五大组成部分 计算机的三大核心硬件 day02 操作系统 编程 ...

  10. Error: EPERM: operation not permitted, mkdir ‘C:\Program Files\nodejs‘TypeError: Cannot read proper

    出现问题: 问题如题,出现场景:vscode运行npm命令 解决办法: 有的友友说安装nodejs时用管理员身份安装,右键没找到最后删掉了此文件即可. 这个文件缓存了之前的配置与现在安装的nodejs ...