探测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加密方式,必须重 ...
随机推荐
- 调整 ANTD 组件菜单的字体大小。
调整 ANTD 组件菜单的字体大小:经过多次试验,原有字体太小,只有12px,通过下列CSS 强制加大. 1.分组子菜单(标题) .ant-menu-inline > .ant-menu-sub ...
- java16
1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 ...
- C/C++:C++中static,extern和extern "C"关键字
1. extern 变量 extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量. 当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern in ...
- eclipse配置jdk的src.zip源代码步骤
MyEclipse配置JDK的源代码的src.zip包很简单.只需要简单的几个步骤. 1.点 “window”-> “Preferences” -> “Java” -> “Insta ...
- 原生js完成拼图小游戏
废话不说,看代码,图片可以自己找,我这直接引用了百度的了 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml ...
- hashmap实现原理浅析
看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和Hash ...
- java发送GET和post请求
package com.baqingshe.bjs.util; import java.io.BufferedReader; import java.io.IOException; import ja ...
- 与IE奋战的血泪史
IE6下font-size会撑高元素,也就是说IE6下元素的最小高度为font-size的高度(蛋疼) IE6不支持两个class 例如 .a.b,类名不支持下划线开头 通过js设置样式带下划线的样式 ...
- Apache, Tomcat, JK Configuration Example
Example of worker.properties: worker.list=myWorker,yourWorker worker.myWorker.port=7505 worker.myWor ...
- 转载:CODE CSDN Git 配制方法介绍
以前一直使用Github,最近看到CSDN出了CODE代码托管功能,由于国内的阿里云服务器很稳定,而且不会被国 墙,所以果断的迁移了,下面就简单的介绍一下CODE的配置使用.其实CSDN的code 何 ...