Output Log Using FtpWebRequest

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

Something like that:

 [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, when connected ...

My current code does only 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()); } 
+5
c # logging ftp ftpwebrequest
source share
2 answers

You can do this using Network Tracing . To configure it , create (or modify, if you already have) the App.config file so that it looks like this (if you already have a file, you will need to add 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, which 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.) 

This is pretty verbose, but it contains the necessary information. If you want to change the way the log file is written, you can implement your own TraceListener and use it in the configuration file instead of TextWriterTraceListener .

+11
source share

Check the following links for reference. if you have IIS 7, then you can implement your own functions.

implementation of IFtpLogProvider protocol interface

 using System; using System.IO; using Microsoft.Web.FtpServer; using System.Diagnostics; using System.Diagnostics.Eventing; namespace FtpLogging { public class FtpLogDemo : BaseProvider, IFtpLogProvider { void IFtpLogProvider.Log(FtpLogEntry loggingParameters) { ....... 

Ref:
IIS FTP 7.5 Extensibility (IFtpLogProvider and Logging FTP Failures in the Event Log)
Problem writing to file (C #)

0
source share

All Articles