探测FTP状态,socket方式
1、FTP返回码列表(哪里都能找到的):
HITE_LOGGER::instance().logDebug("开始探测FTP状态");
if(client.connectTo("127.0.0.1", 21, sc))
{
client.recvFrom(szbuf,128);
std::string lsr = szhite_gvp::__Format("USER root\r\nPASS 123456\r\n");
int ret = client.sendTo(lsr.c_str(), lsr.length());
client.recvFrom(szbuf,128);
lsr = szbuf;
if(lsr.find("230") != std::string::npos)
{
CurState.StatusType = 7;
}
else
{
client.recvFrom(szbuf,128);
lsr = szbuf;
if(lsr.find("230") != std::string::npos)
{
CurState.StatusType = 7;
}
else
{
CurState.StatusType = 6;
}
}
client.close();
}
else
{
std::cout << "port 21 is disable"<<std::endl;
CurState.StatusType = 6;
}
Sleep(5000);
这里是使用的自己封装的TCP类,client作为客户端,初始化步骤正常操作,连接的时候连接目标FTP的IP及对应端口
第一次连接完服务端一般会返回一些东西,微软的IIS6.0-FTP上返回为“220 Microsoft FTP Service”,ServU返回为“220 Serv-U FTP Server v6.3 for WinSock ready...”,其他服务端没有测试,反正一般根据返回字符串里面的220代码来判断连接是否正常
然后发送自己的账号密码,上面测试代码里面用的是root/123456的用户及密码,此处返回值为
“331 User name okay, need password.
User logged in, proceed.”
可以在字符串里面找到230作为验证账号登陆是否成功,失败则服务端返回
“331 User name okay, need password.
Not logged in.”
根据530来判断账号登录失败。
实际测试发现,这两条服务端返回有时是一次发过来,有时会分两次发过来,所以在第一次找230失败的时候再接收一次,以防止服务端第二次才发送FTP登录状态。也可以按顺序先发账号,再发密码。
3、总结
这种方式是通过socket通信向服务端发送基本的FTP操作指令,做一些简单的状态探测比较方便,但是复杂的操作还是用别的方式效率更佳。
探测FTP状态,socket方式的更多相关文章
- 程序中保存状态的方式之Cookies
程序中保存状态的方式之 Cookies,之前写过一篇关于ViewState的.现在继续总结Cookies方式的 新建的测试页面login <%@ Page Language="C#&q ...
- HTTP 和FTP 状态信息总结(留着自己用)
HTTP 状态信息 HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源H ...
- HTTP、FTP状态码 (share)
来源:http://www.cnblogs.com/setsail/archive/2012/03/23/2413577.html HTTP1xx - 信息提示(这些状态代码表示临时的响应.客户端在收 ...
- 程序中保存状态的方式之ViewState
程序中保存状态的方式有以下几种: 1.Application 2.Cookie 3.Session 4.ViewState:ViewState是保存状态的方式之一,ViewState实际就是一个Hid ...
- 使用socket方式连接Nginx优化php-fpm性能
Nginx连接fastcgi的方式有2种:TCP和unix domain socket 什么是Unix domain socket?-- 维基百科 Unix domain socket 或者 IPC ...
- lnmp使用socket方式连接nginx优化php-fpm性能
lnmp使用socket方式连接nginx优化php-fpm性能 Nginx连接fastcgi的方式有2种:TCP和unix domain socket 什么是Unix domain socket?- ...
- php, hhvm与odp & Unix domain Socket方式
接上一篇,复习一下 启动php或hhvm: php/sbin/php-fpm start hhvm/bin/hhvm_control start 启动nginx或lighttpd: webserver ...
- HTTP、FTP状态码 汇总
原文:HTTP.FTP状态码 汇总 HTTP1xx - 信息提示(这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应. ) • 100 - 继续.• 101 - ...
- 重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件
对于Python2.7来说,内置的FTP_TLS类并不支持Implicit FTP Over TLS加密方式的FTP Server操作,为支持Implicit FTP Over TLS加密方式,必须重 ...
随机推荐
- springMVC学习之url重写:urlrewrite with tuckey UrlRewriteFilter
在开发网站时地址栏的一些信息是我们不希望让客户看到,所以在开发时候就会涉及到url重写的问题. 下面介绍一种常用的url地址重写的方法. 1.利用maven下载相关jar文件,pom文件配置如下: & ...
- [Sass]命令编译
[Sass]命令编译 命令编译是指使用你电脑中的命令终端,通过输入 Sass 指令来编译 Sass.这种编译方式是最直接也是最简单的一种方式.因为只需要在你的命令终端输入: 单文件编译: sass & ...
- C语言笔记一
学习C语言已经有一段时间,然而发现越学不知道的东西越多,这是在印象笔记中记得一些东西,现在再回顾一遍顺便补充一些新东西. 一,基础知识 运算符号 优先级 单目>算术>关系 从高到低 ...
- 11g新特性-dba_users安全性的一些增强
1.dba_user表的password(除了GLOBAL和EXTERNAL的密码)不再保存密码. 查询10g的dba_user表 SQL> select username,password f ...
- Mac安装软件报“打不开。。。,因为它来自身份不明的开发者”的解决办法
问题描述 在Mac上安装git,双击pkg进行安装,报如下图错误: 解决办法 不要双击pkg文件,改成选中文件之后,鼠标右键,选择“打开方式->安装器(默认)”,即可继续安装.
- 机器学习实战-python相关软件库的安装
1 安装python 2 安装sublime text2 3 安装NumPy.Matplotlib http://book.51cto.com/art/201401/426522.htm Matplo ...
- jrebel实现tomcat热部署
-noverify -javaagent:D:\jrebel.jar 注:频繁切换工程的时候,热部署可能会失效; 解决办法是:先把项目拖到tomcat下发布,然后在没有配置上面这行代码的情况下,让项目 ...
- mac 下 用 glfw3 搭建opengl开发环境
mac 下 用 glfw3 搭建opengl开发环境 下载编译 glfw3 Build Setting 里面, Library Search Paths -> 设置好编译 glfw 库的路径 H ...
- 【Spring】获取资源文件+从File+从InputStream对象获取正文数据
1.获取资源文件或者获取文本文件等,可以通过Spring的Resource的方式获取 2.仅有File对象即可获取正文数据 3.仅有InputStream即可获取正文数据 package com.sx ...
- 读写注册表 registrykey 创建删除
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { Initialize ...