ftp数据抽取
⑴ 使用java程序到ftp抓取文件并保存到数据库中 若文件名包含英文像wea.png retrieveFileStream方法获取为空
文件名问题没遇到过。
文件大小的遇到过。。
我遇到的是下载小图片压缩包,压缩包小于 64k 时正常,大于64K 后只能解压出一部分约64K左右的数据。
后来发现是使用FTPClient 的时候配置参数中 WINDOWS 和LINUX 的问题。
你可以去尝试一下,从这个方面着手。
⑵ 如何把FTP中的文件复制到本地文件夹
把服务器上面的文件复制到本地有多种方法:
一.在服务器上面安装FTP服务端,通常是可以让服务商帮你安装的.然后在本地电脑上安装flashfxp工具.用该工具登录FTP并把服务器上面的数据下载到本地电脑.
二.在本地电脑点开始-运行.输入mstsc按确定.在弹出的窗口出点选项-点"本地资源"-点"详细信息".把本地磁盘前面的方框勾选上.然后再连接服务器.登录服务器以后打开"我的电脑".在里面可以访问到你本地电脑的磁盘分区.直接把服务器磁盘上的内容复制到本地电脑磁盘即可.
三.登录服务器.把上面需要复制的内容打压缩包.然后通过发邮箱附件的功能把压缩包发到你的另一个邮箱.然后在本地电脑登录收件的邮箱.并把附件下载到本地电脑即可.
⑶ 如何通过ftp方式抽取数据的
端口、用户名以及密码登录FTP就可以上传下载数据
⑷ 如何从ftp上读取超过100m的数据
1、FTP客户端准确的连接服务器,IP,端口,账号,密码。2、选好本地想要保存的目的位置。3、FTP服务器允许下载。。。4、只要选择文件,鼠标选中直接拖放到本地硬盘文件夹内即可。
⑸ 怎么把FTP服务器上的数据库取出放到本地上
1、FTP客户端准确的连接服务器,IP,端口,账号,密码。
2、选好本地想要保存的目的位置。
3、FTP服务器允许下载。。。
4、只要选择文件,鼠标选中直接拖放到本地硬盘文件夹内即可。
⑹ 如何直接把数据从一个ftp服务器上直接复制到另一个ftp服务器上,而不需要先下载然后上传
用Flashfxp这个软件,可以同时开启2个FTP网站,你就可以将数据从这个转到那一个上面去,不过前提是你自己机器上这个程序不能关。
⑺ 如何异步读取FTP
一:开发背景
由于需要对多个服务器发布大的数据包,所以自己在LINUX用C语言,开发了一个传送器工具。因为上传时需要支持断点续传,所以自己参考ftp-rfc959和一些文章开发了这个支持断点续传的上传工具。整个工具分两部分开发的:一是支持断点续传的Ftp工具,包含下载和上传功能。二是同时对多个服务器发布不同数据包的传送器工具。本文只是对断点续传的商船和下载作探讨。
二:实现
其实Ftp上传下载的实现很简单,首先Ftp服务器端要支持文件的定位,
然后就是通过建立的Socket用Ftp服务器命令和服务器交互.
有些也可以通过Socket做自己的客户端和服务器端,但是有些服务器是自己能管理控制的,而且原来自己也写过一些这样C/S模式的工具,简单消息的传送接收还不错。
但用来传输文件效率很低,比文件传送协议FTP(File Transfer Protocol)差的太多。 利用Ftp的服务端可以省去服务器端的开发,而且可以向任何开放Ftp服务的服务器上传送文件,可以不考虑对方安装的
是什么的操作系统。
三:FTP
文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP 使用客户服务器方式。
一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
A、通常的方式:
控制连接在整个会话期间一直保持打开,FTP 客户所发出的传送请求通过控制连接发送给控制进程,但控制连接并不用来传送文件,实际用于传输文件的是“数据连接”。
控制进程在接收到 FTP 客户发送来的文件传输请求后就创建一个“数据传送进程”和一个“数据连接”,并将数据连接连接到“数据传送进程”,数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行
当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。
B、 被动模式:
FTP客户端发出的连接请求,一般通过服务器的21号端口建立控制连接,专门用来传输一些字符串命令和响应信息。控制命令通道一定是由客户端向服务器的连接(默认的端口是21,也可以指定端口,这要看服务器的设置)。
PASV:通过控制通道通过发送PASV 服务器命令到 FTP服务器。请求建立被动模式数据连接通道。 (客户端的命令 passive)
服务器返回连接的信息(227 Entering Passive Mode (70,0,10,62,120,18) )地址和端口。端口=最后第二位乘256再加上最后一位(120*256+18)。(注意端口设为0的情况) 如: *f_port = atoi(port_1) * 256 + atoi(port_2);
服务器端和客户端身份转换,原客户端在本地建立监听,监听来自原服务器远端的连接请求建立数据连接通道。
四、 实现方法:
A、下载:
1、向服务器发送“REST + 本地文件长度”,告诉服务器,客户端要断点下载了。这时服务器还不知道客户端要下载的文件名;
2、向服务器发送"RETR + 文件名",通知服务器要下载的文件名,这时服务器开始定位文件指针读文件并发送数据。
3、客户端定位本地文件指针偏移到文件末尾;
4、两端的准备工作都做完了以后,客户端创建socket,以被动或非被动方式建立数据链接,循环调用recv接收文件数据并追加到本地文件末尾;
B、上传:
1、获取服务器上和本地要上传文件的同名文件大小;
2、向服务器发送“APPE + 文件名”,通知服务器,从数据通道发送给你的数据要附加到这个文件末尾。
3、定位本地文件指针,文件指针偏移到指定位置,这个位置与FTP服务器上文件大小相同的位置。
4、从文件指针处读数据并发送。
C、Ftp服务器命令
我们平时使用的命令,大多是客户端的。服务器端的命令可以参考下面:
命令 描述
ABOR 中断数据连接程序 ACCT <account> 系统特权帐号
ALLO <bytes> 为服务器上的文件存储器分配字节 APPE <filename> 添加文件到服务器同名文件
CDUP <dir path> 改变服务器上的父目录 CWD <dir path> 改变服务器上的工作目录
DELE <filename> 删除服务器上的指定文件 HELP <command> 返回指定命令信息 LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表 MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
MKD <directory> 在服务器上建立指定目录 NLST <directory> 列出指定目录内容
NOOP 无动作,除了来自服务器上的承认 PASS <password> 系统登录密码
PASV 请求服务器等待数据连接 PORT <address> IP 地址和两字节的端口 ID PWD 显示当前工作目录 QUIT 从 FTP 服务器上退出登录
REIN 重新初始化登录状态连接 REST <offset> 由特定偏移量重启文件传递
RETR <filename> 从服务器上找回(复制)文件 RMD <directory> 在服务器上删除指定目录
RNFR <old path> 对旧路径重命名 RNTO <new path> 对新路径重命名
SITE <params> 由服务器提供的站点特殊参数 SMNT <pathname> 挂载指定文件结构
STAT <directory> 在当前程序或目录上返回信息 STOR <filename> 储存(复制)文件到服务器上
STOU <filename> 储存文件到服务器名称上 STRU <type> 数据结构(F=文件,R=记录,P=页面)
SYST 返回服务器使用的操作系统 TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
USER <username>> 系统登录的用户名
D、服务器返回的部分数字代码含义
125 Data connection already open; Transfer starting.
226 Transfer complete.
227 Entering Passive Mode (127,0,0,1,4,18).
230 User xxxxx logged in.
331 Password required for xxxxx.
425 Can’t open data connection.
226 Closing data connection.
200 return a state of TYPE or MODE commond
220 connection state
五、关于Socket
关于Socket编程有很多参考资料,这里不作详细说明
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口
Socket 是一个基本的通信机制Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
常用的Socket类型有两种:
A、流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用。
B、数据报式Socket(SOCK_DGRAM):数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
Socket的程序是一种C/S结构,分客户端和服务器端。
A、客户端
– 初始化Socket
– 连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了
– 客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端
– 客户端读取数据,最后关闭连接,一次交互结束。
B、服务器端
- 初始化Socket
- 端口绑定(bind)
- 监听(listen)端口
- 调用accept阻塞,等待客户端连接
在这里我们使用的就是面向连接的流式Socket,只编写客户端的程序。
六、代码:
下面仅提供一个编译过并在使用中的函数简单的说明其实现原理,
需要有一点C语言和Linux/UNIX的socket编程基础即可理解。
只是建立连接和传输部分的一个函数。当文件传出结束或断开时,
可以调用检查函数看是否成功,字节是否正常等,如果不正常结束,
可以再次循环调用它并定为服务器文件的字节,继续传输。
其他的控制和功能都在其他函数中实现。为移植方便使用标准C语法符合C89标准。
code:
/*****************************************************************
* FileName: uftt_ver5.c *
* Company: algorithmics china lib Co.,Ltd. *
* Author: G.L.Zhang --- zglcl008 *
* Time: [2006-12-20] *
* Description: uninterrupted file transfers tools *
*****************************************************************/
int f_file_trans(const char *ft_addr, int ft_port, const char *ft_usr,const char *ft_pwd, const char *ft_opt, const char *ft_src, char *ft_obj, int ft_flg)
{
int cmd_sock = -1;
int dat_sock = -1;
int stream_sock= -1;
int dat_port = 0;
char dat_buffer[1024*5];
struct sockaddr_in f_server;
struct sockaddr_in f_datasvr;
unsigned char *pasv_ip = NULL;
unsigned char *pasv_port = NULL;
unsigned int len_addr = 0;
long rc_size = 0;
/* long svr_file_size = 0; */
long file_size = 0;
int rc = 0;
if (ft_addr == NULL || ft_usr == NULLft_pwd == NULL ||
ft_opt == NULL || ft_src == NULL || ft_obj == NULL ||
ft_port == 0 || ft_flg < 0) {
err_quit("--- file transfers parameter error");
}
/* get ftp commomd socket */
if ((cmd_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("cmmond socket");
err_quit("--- command sock error");
}
bzero(&f_server, sizeof(f_server));
f_server.sin_family = AF_INET;
f_server.sin_port = htons(ft_port);
f_server.sin_addr.s_addr = inet_addr(ft_addr);
if (connect(cmd_sock, (struct sockaddr *)&f_server, sizeof(f_server)) < 0) {
perror("connect");
err_quit("--- command sock error");
}
rc = uftt_cmd(dat_buffer, cmd_sock, NULL);
if (rc == 220)
printf("-1- %d OK\n", rc);
else
printf("-1- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock,"USER %s",ft_usr);
if (rc == 331)
printf("-2- %d OK\n", rc);
else
printf("-3- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock,"PASS %s",ft_pwd);
if (rc == 230)
printf("-3- %d OK\n", rc);
else
printf("-3- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock, "TYPE I");
if (rc == 200)
printf("-41- %d OK\n", rc);
else
printf("-41- %d ERR\n", rc);
rc = uftt_cmd(dat_buffer, cmd_sock, "MODE S");
if (rc == 200)
printf("-42- %d OK\n", rc);
else
printf("-42- %d ERR\n", rc);
memset(dat_buffer, ''\0'', sizeof(dat_buffer));
rc = uftt_cmd(dat_buffer, cmd_sock, "PASV");
if (rc == 227)
printf("-5- %d OK\n", rc);
else
printf("-5- %d ERR\n", rc);
#ifdef ZGL_DEBUG
printf("-5- %d %s\n", rc, dat_buffer);
#endif
/* get passive port */
dat_port = 0;
if ((rc = get_svr_port(dat_buffer, (int *)&dat_port)) < 0)
err_quit("data stream port error");
#ifdef ZGL_DEBUG
printf("--- pasive port=[%d]\n", dat_port);
#endif
if ((dat_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("data socket");
err_quit("--- data sock error");
}
len_addr = sizeof(f_datasvr);
bzero(&f_datasvr, sizeof(f_datasvr));
rc = getsockname(cmd_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
f_datasvr.sin_port = htons(dat_port);
/* 0=all port or appoint port TEST OK ***
f_datasvr.sin_port = htons(dat_port);
f_datasvr.sin_port = 0;
*/
if (bind(dat_sock,(struct sockaddr *)&f_datasvr,len_addr) == -1)
err_sys("--- data sock bind error");
if (listen(dat_sock,1) == -1)
err_sys("--- data sock bind error");
rc = getsockname(dat_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
pasv_ip = (unsigned char *)&f_datasvr.sin_addr;
pasv_port = (unsigned char *)&f_datasvr.sin_port;
rc = uftt_cmd(dat_buffer, cmd_sock,"PORT %d,%d,%d,%d,%d,%d",pasv_ip[0],
pasv_ip[1], pasv_ip[2], pasv_ip[3], pasv_port[0], pasv_port[1]);
if (rc == 200)
printf("-6- %d OK\n", rc);
else
printf("-6- %d ERR\n", rc);
/* get RETR put STOR append APPE */
if (ft_flg == 0) {
rc = uftt_cmd(dat_buffer, cmd_sock, "STOR %s", ft_obj);
}
else if (ft_flg > 0){
rc = uftt_cmd(dat_buffer, cmd_sock, "APPE %s", ft_obj);
}
if (rc == 150)
printf("-7- %d OK\n", rc);
else
printf("-7- %d ERR\n", rc);
stream_sock = accept(dat_sock, (struct sockaddr *)&f_datasvr, (unsigned int *)&len_addr);
if (stream_sock < 0)
err_sys("--- stream socket error");
rc_size = f_put_file(stream_sock, ft_src, ft_obj, ft_flg, file_size);
/* do without ***
rc = uftt_cmd(dat_buffer, dat_sock,"QUIT");
printf("-8- %d \n", rc);
*/
close(stream_sock);
close(dat_sock);
rc = uftt_cmd(dat_buffer, cmd_sock,"QUIT");
if (rc == 226)
printf("-9- %d OK\n", rc);
else
printf("-9- %d ERR\n", rc);
close(cmd_sock);
return rc_size ;
}
⑻ ftp 上的文件 如何复制下来
FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。 FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。 1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。 但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。 2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。 如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。 5. FTP的工作方式 FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。 下面介绍一个这两种方式的工作原理: Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。 Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。 很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
⑼ 我想拿下一个FTP,这个FTP有密码,请问能不能绕过密码获得里面的数据
开放了了FTP 那么就会有开放端口,你可以入侵,也可以用工具扫描FTP的帐号和密码, 不过有点麻烦,4个数字和字母组成的口令可以在几分钟内破解,但是如果多了的话,组合可能性高大 10万亿种,没秒扫描100万种组合,也要一个多月......
⑽ 关于用WireShark抓取ftp协议包,新手求教
请定义一下什么是还原?因为对不同的协议,还原是不一样的,有的只要把数据提取出来放到一起就可以了,有些则需要做很多复杂的事情,当然如果加密的,就更加复杂了,还有些协议中的部分是为了通讯而产生的,比如ftp命令,还原应该是把原来的文件恢复出来吧。好像有个软件可以把文件传输中的文件还原出来。