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. P8340 [AHOI2022] 山河重整

    \(20pts\) 给 \(O(2^n)\) 枚举,\(60pts\) 是 \(O(n^2)\),先看看怎么做.计数题无非容斥和 \(dp\),不妨从 \(dp\) 入手.多项式复杂度的做法意味着无法 ...

  2. 初探富文本之OT协同算法

    初探富文本之OT协同算法 OT的英文全称是Operational Transformation,是一种处理协同编辑的算法.当前OT算法用的比较多的地方就是富文本编辑器领域了,常用于作为实现文档协同的底 ...

  3. python进阶之路17 包的使用、collections、time、random模块

    包 大白话: 多个py文件的集合>>>:文件夹 专业:内部含有__init__.py文件的文件夹(python2 必须要求 python3无所谓) 包的具体使用 虽然python3对 ...

  4. SSM框架——SpringMVC

    SpringMVC MVC三层架构 Controller层:取得前端数据.调用相关业务逻辑.转发/重定向到其他页面 Model层:实现业务逻辑.保存数据 View层:显示页面 1.第一个MVC程序 新 ...

  5. P1005 [NOIP2007 提高组] 矩阵取数游戏

    题目传送门 前言 今天依旧是不写高精的一天呢!(是的,这位作者又只拿了开 \(LL\) 的 \(\color{yellow}{60}\) 分) 思路描述 看到数据 \(n,m \le 80(30)\) ...

  6. 杂项 NOI2020 打铁记

    杂项 NOI2020 打铁记 day -一个月 他一个月前,期末考试刚刚结束,开始了NOI2020的冲刺.虽然时间并不充足,但一想到一个月后能站在国赛的赛场上,与来自全国的高手们一较高下,他充满了干劲 ...

  7. 複合語句塊——關於while循環的

    看這兩個小段代碼: /*code1.*/ index=0; while(index<10) sam = 10*index+2; printf("sam=%d\n",sam); ...

  8. Docker 基础 - 1

    镜像 获取镜像 docker pull 查看镜像信息 docker images docker inspect <images id> # 获取镜像的详细信息 搜寻镜像 docker se ...

  9. 基于NOSTR协议的“公有制”版本的Twitter,去中心化社交软件Damus用后感,一个极端走向另一个极端

    最近,一个幽灵,Web3的幽灵,在网络游荡,它叫Damus,这玩意诠释了什么叫做病毒式营销,滑稽的是,一个Web3产品却在Web2的产品链上疯狂传销,各方大佬纷纷为其背书,到底发生了什么?Damus的 ...

  10. 【学习笔记】C++ 常量折叠原理和验证

    以下的代码很有意思,在相同时刻,相同的内存地址,数据居然会不一样. #include <iostream> int main(void) { const int const_val = 3 ...