Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Output log using FtpWebRequest

I wonder if it's possible to have output log for my FTP client using FtpWebRequest.

Something like this:

[R] USER xxx
[R] 331 Please specify the password.
[R] PASS (hidden)
[R] 230 Login successful.
[R] SYST
[R] 215 UNIX Type: L8
[R] FEAT
[R] 211-Features:
[R]  EPRT
[R]  EPSV
[R]  MDTM
[R]  PASV
[R]  REST STREAM
[R]  SIZE
[R]  TVFS
[R] 211 End
[R] PWD
[R] 257 "/"
[R] CWD /
[R] 250 Directory successfully changed.
[R] PWD
[R] 257 "/"
[R] TYPE A
[R] 200 Switching to ASCII mode.
[R] PASV
[R] 227 Entering Passive Mode (10,232,201,81,141,175)
[R] Opening data connection IP: 10.232.201.81 PORT: 36271
[R] LIST -al
[R] 150 Here comes the directory listing.
[R] 226 Directory send OK.

This output for example is when connecting...

My current code only does the following:

// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(string.Format("ftp://{0}", addrEndPoint));
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(_currentConnection.Username, _currentConnection.Password);

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Stream responseStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);

if (readStream != null)
{
    Console.WriteLine(readStream.ReadToEnd());
}
like image 442
kaycee Avatar asked Mar 12 '12 09:03

kaycee


People also ask

What is a FTP log?

The FTP log contains a record of all FTP connections but excludes any connections made via SFTP/SSH. The log itself is a plain text file which can be read with any plain text reader.

Where to find FTP logs in Windows?

The FTP log location defaults to: C:\inetpub\logs\LogFiles\FTPSVC2 on the target server. If not there, the location can be found by running "Internet Information Services (IIS) Manager" from the Server Manager's "Tools" menu, selecting the server in IIS Manager and double-clicking the "FTP Logging" icon.

What is FTP output?

FTP output tasks send job files to other computers using the FTP protocol. It is similar to the Sent to Folder output task but sends to an FTP connection instead of a local drive.


1 Answers

You can do this using Network Tracing. To set it up, create (or modify, if you already have one) App.config file, so that it looks like this (if you already have the file, you will need to add the settings to it):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="protocolonly" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Information"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="network.log"
      />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
</configuration>

If you do this, your application will create a network.log file, that might look something like this:

System.Net Information: 1 : [8892] FtpWebRequest#2383799::.ctor(ftp://test/)
System.Net Information: 0 : [8892] FtpWebRequest#2383799::GetResponse(Method=LIST.)
System.Net Information: 0 : [8892] Current OS installation type is 'Client'.
System.Net Information: 0 : [8892] RAS supported: True
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Created connection from 192.168.1.1:51833 to 192.168.1.2:21.
System.Net Information: 0 : [8892] Associating FtpWebRequest#2383799 with FtpControlStream#33675143
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [220 This is the test FTP server. Authentication required.]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [USER svick]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [331 Password required for svick]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASS ********]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [230 Logged on]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [OPTS utf8 on]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 UTF8 mode enabled]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PWD]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [257 "/" is current directory.]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [TYPE I]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 Type set to I]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASV]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [227 Entering Passive Mode (174,37,88,92,117,98)]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [LIST]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [150 Connection accepted]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [226 Transfer OK]
System.Net Information: 0 : [8892] FtpWebRequest#2383799::(Releasing FTP connection#33675143.)

It's quite verbose, but it does contain the information you need. If you want to modify how is the log file written, you can implement your own TraceListener and use that in the config file instead of TextWriterTraceListener.

like image 75
svick Avatar answered Sep 21 '22 02:09

svick