FileZilla Server源码分析

filezilla源码安装教程(含错误信息解决方案) 环境搭建 1、拿到filezilla-3.8.1源码,wxWidgets-2.8.12源码 下面是编译环境的搭建(目前记录的是uos上搭建环境的问题与解决方案,部分疑难问题的错误信息在括号内标注,ubuntu 16.04上貌似问题更多一些) wxWidgets: 1、./configure 如果出现./config.guess: unable to guess system type 执行下面的代码 wget -O config.guess ‘http://git.savannah.gnu.org/gi 阅读详情
之所以有本系列的分析,是因为两点:
  1. FileZilla 是目前非常火爆的开源ftp项目,整个项目采用C++代码编写,代码紧凑可读性高,值得学习(缺陷是注释太少)。
  2. 网络上已有的对该源码的分析基于的版本是0.9.18,分析比较粗略,无论是框架还是细节。
这里仅仅是我个人对FileZilla Server源码 0.9.34 版本的分析,能力有限,不足和错误之处还希望大家不吝斧正。
本片作为开篇,略过如何编译(该源码源码用VS2010编译),如何配置,如何使用。 FileZilla官网提供了程序和源码下载(源码包含在程序中,安装时默认为不安装),以及编译步骤和注意事项,感兴趣的朋友可以自行去官网寻找或google。

感谢:分析时参考了网友的系列文章《 FileZilla FTP服务器源代码分析》,大家可以参照比对。

首先预览一下源码目录source文件夹下的大致文件布局。



6个子目录,核心的代码(线程、socket、命令等)都放在当前目录下。6个子目录及对应代码功能:

子目录功能
includes当前版本下只有一个子目录openssl,看名识意,不多解释
install安装脚本和资源
interface界面UI实现类
misc混杂类,比较重要的如md5,StdString等
res程序编译资源,目前只有一个icon
tinyxml著名的一款基于DOM模型小巧开源的xml解析器

当前source目录下源码按实现功能大致又分为以下几种类型:

功能分类包括的文件
网络全体文件名含socket的,Server.*,
线程文件名包含Thread的文件
辅助version.*,MFC64bitFix.*,conversion.*,config.h,service.cpp等除去网络和线程的文件

文件目录结构分析完了,面对众多.h.cpp文件,需要做一些去繁取精的操作。从无关紧要的地方开始,例如version.*。

version.*中声明定义了一个函数 CStdString GetVersionString(),需要注意的就是CStdString这个类,它的实现在misc/stdString.h文件中,这个类文件较大,功能稍后部分再分析。说句实话,这个函数是很值得收藏的。

Thread.*定义了线程类CThread,只需要注意那个Run函数中对线程消息做了处理,有用的消息交由虚函数 OnThreadMessage处理。

作为Visual Studio生成的C++代码中最常出现的两个文件stdafx.h和stdafx.cpp,我们势必需要首先弄清楚它们到底包含了哪些头文件,定义了哪些宏,什么了哪些函数以及结构体。

stdafx.h中包含了自己的config.h这个文件,顺便看一下这个文件的作用,代码很少目的有两个,强制使用unicode编译和检测是否安装了最新SDK。还包含了MFC64bitFix.h这个文件,也跟进去看看。定义了一个存储文件属性的结构体 CFileStatus64,以及操作它的若干全局函数,这个文件名有点怪,和包含的功能不匹配。
第55行遇到了条件宏 #ifdef MMGR,编译条件中有定义,包含misc/mmgr.h文件。mmgr是用于管理和跟踪内存的代码,之后会重点详细分析。
conversion.h中声明的函数用于ANSI和UTF8字符的互相转换,不多解释。
AsyncSocketEx.h中实现了异步socket,之后的ControlSocket,AdminListenSocket等文件中什么的socket都是由CAsyncSocketEx类派生来的,之后分析。
至此,stdafx.h中头文件包含全部结束,下面就是宏定义了。

先补充一个知识点,各消息的值范围和作用见下图:


注册了 WM_FILEZILLA_THREADMSG消息用来线程之 间通信,定义了 WM_FILEZILLA_SERVERMSG用于进 程间通信,即FileZilla server.exe和FileZilla Server Interface.exe。
这里仅贴出两处源码中调用这两个消息的例子,便可得知后面定义的几个常数宏的用处。
// ControlSocket.cpp第400行
SendStatus(_T( " could not send reply, disconnected. " ),  0 );
m_pOwner
-> PostThreadMessage(WM_FILEZILLA_THREADMSG, FTM_DELSOCKET, m_userid);

//Server.cpp第813行器
int index = GetNextThreadNotificationID();
CServerThread *pThread = new CServerThread(WM_FILEZILLA_SERVERMSG + index);
m_ThreadNotificationIDs[index] = pThread;

从上面代码可以看出 PostThreadMessage的第二个参数wParam就是定义的数字宏,第三个参数是结构t_statusmsg,这些宏功能分别是:

FSM_STATUSMESSAGE:在管理窗口或log中显示并记录状态信息
FSM_CONNECTIONDATA:和连接相关的信息,如新用户连接,登录,退出等
FSM_THREADCANQUIT:退出线程
FSM_SEND:发送数据时用于管理窗口统计发送字节数
FSM_RECV:接受数据时用于管理窗口统计接收字节数
其余的就不多写了,宏名比较直观的显示出意思。

在往下定义了一系列的结构如 t_statusmsg,之后用到的地方在详述,知道这些结构在哪个文件中定义的就行了。
接着就是extern HWND hMainWnd; 这个外联的句柄就是下一节将要提到的CServer的窗口类句柄。
最后定义了一个CCriticalSectionWrapper类和两个帮助检测临界区死锁的函数,尤其是前者,DEBUG版本时错误的使用将导致当前线程挂起。

SpeedLimit.*:  速度限制(包括时间段限制)

这里针对UI性比较强,FillBuffer这个函数将所有限制条件格式化成一个char字符串,ParseBuffer则是解析这个字符串,采用这个 类,可以轻松实现强大的自定义限速功能。

defs.h: 这个类定义了服务器的状态,如在线、离线、锁住 等。  


Options.*,OptionTypes.h  

OptionTypes.h中定义了一个结构数组 m_Optinons,保存所有配置项信息,如是否使用SSL,同时在线最大用户数量,上传下载限速等等,所有这些大部分都被使用在Option那个对话框UI上。
t_option结构中有一个BOOL bOnlyLocal成员用于标示该项是否可以仅能够被本地连接修改,数组中只有最后两项Server name 和 server display name为TRUE,Options类就是操作配置文件的实体类(注意,它使用了tinyXML),服务器的配置文件存储在exe同级目录下,叫FileZilla Srver.xml。Options的主要操作是针对内存中的配置,只有与默认值不同的项才会存入配置文件中。
Options还有一个隐藏的friend窗体类   COptionsHelperWindow,定义在cpp文件中,这个类用于通过用post WM_USER给窗体消息这种异步的方式去更新option实例,而不是options类自身。
有了Options类和OptionTypes.h中定义的配置类型,就可以通过诸如 m_pOptions->GetOptionVal(OPTION_ENABLELOGGING)这样的方法方便的获取到配置。  

FileLogger.*  日志  

这个类中包含Options类的一个对象指针,用来读取日志文件的相关配置。  

iputils.* 判断IP合法性以及是否处于某个过滤范围  

它采用了大名鼎鼎的boost库的regex来判断,这个库之后有时间一定要好好研究一下。  

autobanmanager.*  阻止用户继续登录的方法类文件  

AutoBan这个设置项是一个非常浪费资源的,因为它对每一个失败的ip都要记录查询内存中的两个map。  

Accounts.* 账户

Accounts.h中声明了3个类,t_directory,t_group,还有继承于t_group的t_user。
t_directory仅仅含有一些权限声明,相当于一个struct,被t_group和t_user使用。
剩余两个类主要做的事是对配置的读取分析,所有的数据都是基于字符串的。

permission.* 对用户、群组访问资源进行鉴权

权限配置信息记录在FileZilla Server.xml中。
服务器对每一个group和user都有权限限制,group权限优先于user权限,在 CheckFilePermissions  函数中可以看出。

conversion.* utf8和ansi字符的相互转化  


ExternalIpCheck.*  PASV模式

根据配置获取ip。

所有辅助文件已经分析完毕,下级节开始分析socket和线程类。
FileZilla Linux版源代码分析 此外,FileZilla项目还接受来自开源社区的贡献和反馈,不断进行更新和改进,以提供更好的用户体验和功能。FileZilla是一款广泛使用的开源FTP客户端软件,它提供了跨平台的支持,并且在Linux操作系统上也有相应的版本。在本篇文章中,我们将对FileZilla Linux版的源代码进行分析,深入了解其实现细节和功能。FileZilla Linux版的源代码设计具有较好的扩展性和定制性,可以方便地进行功能扩展和定制。开发者可以通过添加新的模块或插件来增加额外的功能,或者修改现有代码来满足特定的需求。 阅读详情

相关推荐

【C++】Ubuntu编译filezilla client

编译FileZilla客户端的过程比较复杂,因为这不是一个简单的程序,它依赖于很多其他库。以下是在Ubuntu上编译FileZilla的一般步骤,但请注意,具体步骤可能会稍有不同,这取决于您所使用的Ubuntu版本以及FileZilla的版本。由于源代码和依赖项可能会随时间更新,所以总是建议查看FileZilla的官方文档或源代码仓库中的README文件,以获取最新的编译说明和要求。在Ubuntu上编译FileZilla客户端是一个相对复杂的过程,因为FileZilla客户端使用了多个库和依赖项。

数字人生 1115

FileZilla Server源码分析(1)

之所以有本系列的分析,是因为两点: FileZilla 是目前非常火爆的开源ftp项目,整个项目采用C++代码编写,代码紧凑可读性高,值得学习(缺陷是注释太少)。网络上已有的对该源码的分析基于的版本是0.9.18,分析比较粗略,无论是框架还是细节。 这里仅仅是我个人对FileZilla Server源码0.9.34版本的分析,能力有限,不足和错误之处还希望大家不吝斧正。 本片作为开篇

flymachine的专栏 9443

电商微信小程序源码全栈解析:从Spring Boot后端到部署与二次开发实战

在软件开发领域,源码分析与全栈部署是开发者从理论走向实践的关键环节。其核心原理在于理解一个完整应用从前端界面、后端逻辑到数据库设计的协同工作方式,掌握如何将分散的代码模块集成为一个可运行的系统。这项技术的价值在于能大幅降低项目启动门槛,使开发者能基于成熟框架快速构建可定制化的商业应用,尤其适用于电商、社交等需要快速验证和迭代的场景。本文聚焦于电商微信小程序这一典型应用,深入拆解一套包含Spring Boot后端和MySQL数据库的完整源码架构。通过剖析其模块设计、数据流与部署流程,并结合微信支付集成、库存管

weixin_34413103的博客 455

读懂源码系列-FileZilla Server 设计原则分析-编译篇(1)

1.前言     FileZilla Server 是 Windows 下的一个开源 FTP 服务器,最近想要重温一下该开源 FTP 服务器的整体设计流程,因此重新下载了较新的源码版本。     通常随着开源代码的不断更新,会添加越来越多的功能,代码也就越来越复杂。因此,为了快速上手并了解某个开源项目,应该从最低版本看起。但是,由于之前我已看过最低版本,大概已了解项目整体设计。所以,本次分析的

systomnet的专栏 1228

FileZilla FTP服务器源码解析与实践

在本章中,我们深入了解了QT框架如何在FileZilla项目中发挥关键作用,提供了跨平台用户界面解决方案。从信号与槽机制的优雅应用到用户界面设计的灵活性与可扩展性,QT为FileZilla带来了强大的开发能力。同时,针对跨平台用户界面设计的关键要点,我们分析了QT如何通过其丰富的工具和API适应不同平台的特性,并通过QSS及Qt Linguist处理多语言支持和国际化问题。

weixin_36369848的博客 761

最快速的FTP服务HA-FileZillaServer

最快速的FTP服务HA-FileZillaServer!!!!!!!!!!!!!!!

VS2010编译FileZilla Server源代码

编译FileZilla Server过程,希望其他人不要走弯路 首先下载相关的文件: 1、FileZilla_Server-0_9_41.exe 2、zlib-1.2.5.rar 3、tinyxml_2_6_2.zip(这个不用下了,0.9.41里面有) 安装FileZilla_Server-0_9_41.exe时,选择Source Code,如下图(转载的图,版本不对,参考下,不影响)

sondx的专栏 6857

《UE4游戏开发》之 《音效系统的实现》

音效系统需要负责管理什么事情: 1.1 确定声音控制的分类:如背景音乐、技能音效、界面音效、角色配音等,不同游戏对声音有不同的分类 1.2 控制每个分类的声音的开启与关闭,以及调节每个分类声音的大小 解决如何分类: 2.1 首先需要知道ue4为声音分类提供了什么:SoundClass通常需要一个根分类【SC_RPG_Master】,便于总体控制音效,以及指定引擎默认启动的音效 打开SoundClass资产【SC_RPG_Master】,对根控制的设置,将逐级传递并按比例进行设置,以此达到控制一类声音的目的.

qq_21919621的博客 2126

读懂源码系列-FileZilla Server 设计原则分析-socket 事件响应流程(3)

1. 网络模型初探         FTP 服务器会监听指定的 21 端口,等待用户连接,这是所谓的控制连接。当需要数据传输时,客户端和服务器之间会再建立一个数据连接。         本期文章暂不涉及 FTP 协议的处理过程,重点在于梳理 FileZilla Server 的网络模型。 接上一期,FTP 服务器初始化线程代码。该线程创建了 CServer 类,执行流程来到 CServer:

systomnet的专栏 705

22AP10 SS524 平替 海思HI3521DV200 可提供开发资料

入,突破了数字接口的视频输入性能瓶颈,提供两倍于前代产品的视频输入能力。视频编解码引擎、视频图像处理的算法效果及性能得到了进一步提升。芯片为客户产品提供了高性能、优异图像质量。推理引擎,支持多种智能算法应用。合丰富的外围设备及高速接口,该。解决方案,广泛用于模拟高清。产品应用开发的新一代专。四核处理器和性能强大的。

szhorsway的博客 1011

陷波滤波器设计以及Simulink仿真

离散型陷波滤波器设计以及simulink仿真

hmq252198885的博客 3166

转载-FileZilla Server源码分析(1)

FileZilla Server源码分析(1) 分类: VC 2012-03-27 17:32 2363人阅读 评论(0) 收藏 举报 serversocketftp服务器usersockets工作 之所以有本系列的分析,是因为两点: FileZilla 是目前非常火爆的开源ftp项目,整个项目采用C++代码编写,代码紧凑可读性高,值得学习(缺陷是注释太少)。 网络上已有...

weixin_30737363的博客 316

避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决

本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。

weixin_29213525的博客 729

FileZilla Server源码分析--大漠落日5节

之所以有本系列的分析,是因为两点: FileZilla 是目前非常火爆的开源ftp项目,整个项目采用C++代码编写,代码紧凑可读性高,值得学习(缺陷是注释太少)。网络上已有的对该源码的分析基于的版本是0.9.18,分析比较粗略,无论是框架还是细节。 这里仅仅是我个人对FileZilla Server源码0.9.34版本的分析,能力有限,不足和错误之处还希望大家不吝斧正。 本片作为开篇

ztsinghua的专栏 1973

开源免费!ReaLTaiizor如何用MIT许可证打造专业级WinForm UI?

摘要: ReaLTaiizor是一款开源UI控件库,为WinForm应用提供现代化界面解决方案。支持100+组件、多主题切换(浅色/深色/自定义)和.NET 4.8-8.0全版本兼容,MIT许可证允许免费商用。通过NuGet快速安装,3步改造传统界面:1)注入主题(如this.Theme = new Dark()),2)替换原生控件为高颜值组件(如ModernGrid替代DataGridView),3)集成高级功能(分页/动画提示)。典型场景包括登录界面美化(进度动画+通知控件)和数据表格Material风

墨夶的博客 1521

linux内核学习(八)---摄像头框架移植(上)

本章来开始进行摄像头的移植,同时回顾一下V4L2的整个框架

文艺小少年的博客 113

摘要: 用VS2005编译Filezilla Server 0.9.39的相关文件下载,及编译方法。

简单对Filezilla Server 0.9.39源代码进行分析,参考了《FileZilla Server源码分析 》 和《FileZilla FTP服务器源代码分析》的内容。 首先下载相关的文件: 1、FileZilla_Server-0_9_39.exe 2、zlib-1.2.5.tar.bz2 3、tinyxml_2_6_2.zip 安装FileZilla_Server-0_

vishtvro的专栏 1173

Codex 接入自定义大模型终极教程:插件解锁、会话管理、国产模型一键搞定

🚀 Codex 默认只能使用 OpenAI 官方模型?这篇文章带你从零接入 DeepSeek、通义千问、GLM 等国产大模型,并彻底解锁插件、会话删除、多模型切换等隐藏功能。配置原理、常见坑点、傻瓜式增强工具分享,小白也能轻松上手!🔥

XiaoqiangClub的博客 3147

【开源项目】FileZilla源码自带线程封装

#if !defined(AFX_THREAD_H__67621B15_8724_4B5D_9343_7667075C89F2__INCLUDED_) #define AFX_THREAD_H__67621B15_8724_4B5D_9343_7667075C89F2__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER >

Fzuim的博客 1035

【教程4>第8章>第44节】本章整体思维导图与学习总结

本教程系列提供FPGA/MATLAB/Simulink学习资源,包含《MATLAB入门100例》、《FPGA入门100例》、《Simulink入门60例》等基础教程,以及《FPGA/MATLAB/Simulink联合开发》进阶教程和《人工智能基础应用研究》专题,适合不同层次的学习者系统掌握相关技术。

FPGA/MATLAB学习教程/源码/项目合作开发 448

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分享一款 ftp 软件 —— filezilla的源码

注意: 客户端使用 C++11 开发,而之所以服务器端的 filezillaserver 和 filezillaserver 选择使用较新的 VS2015,是因为服务器端的代码使用了 C++14 的一些特性,而 VS2013 是不支持 C++14 的所有的特性的。3. 编译filezillaserverinterface用VS2015打开filezillaserverinterface\filezillaserver\filezillaserverinterface.sln编译即可。

左雪菲的专栏 1588

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

FileZilla Server与FileZilla Client

FileZilla Server 简介 FileZilla Server是一款开源、免费的FTP客户端服务器端的项目,主要优势是高安全性和高性能,安全性是来自于其开放源代码的,高性能来自于其代码的开发平台是C/C++,自身基础就好于其他VB/Dephi平台开发的应用程序,占用资源非常少,是一款超强的开源免费FTP 服务器软件。 下载安装 FileZilla Server的下载地址为:https://www.filezilla.cn/download/server。 选择FileZilla Server 0

xupeng1644的博客 7859

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

FileZilla Server搭建 ftp服务器的Windows 防火墙规则设置方法【FTP服务器主动模式和被动模式的区别】

一开始是防火墙安全策略入站规则只放行了20、21端口,然后发现终端可以连接登录到FTP服务器,但是无法上传和下载文件。最终发现是FTP的主动模式和被动模式需要用到的TCP端口不一样,导致网络不通。而我FTP服务器采用的是被动模式。

ihaveapanchan的博客 5087

FileZilla_Server和客户端安装配置

一、FileZilla_Server-0_9_60_2安装 默认全部安装 修改端口:setting——admin interface setting 修改端口 添加证书:FTP over TLS setting 添加证书 修改连接方式为被动:passive mode settings 勾选user custom port range:8000-8020 设置防火墙:添加入站...

赖胖子的博客 2167

FileZilla FTP服务器源代码分析1

FileZilla是开源的FTP服务器,用C++写的,通过分析它的源代码,可以掌握C++网络编程以及高并发服务器的设计。 FileZilla 是http://sourceforge.net上的项 目,主页是FileZilla® download | SourceForge.net, 我们要研究的版本是:FileZilla Server 0_9_18,其实FileZilla还包括客户端软件。 下载后安装,安装时选择安装source,即安装了源代码。 安装完成后,可以直接打开工程自带的FileZilla s

zhanglei_admin的博客 1330

【FTP协议 02】FileZilla 搭建服务器

FileZilla 使用说明

Jayson 博客 3180
上一篇: typeid详解
下一篇: mangle和demangle
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值