Wednesday, October 19th, 2011
Ftp.dll .NET FTP component supports both Active and Passive mode FTP transfers.
In Active mode client waits for incomming data connections, in Passive mode client establishes data connections.
Passive mode is default. You can switch to Active mode using Mode property:
// C#
using (Ftp client = new Ftp())
{
client.Mode = FtpMode.Active;
client.Connect("ftp.example.com");
client.Login("user", "password");
// ...
client.Close();
}
' VB.NET
Using client As New Ftp()
client.Mode = FtpMode.Active
client.Connect("ftp.example.com")
client.Login("user", "password")
' ...
client.Close()
End Using
Posted in Ftp.dll | Tags: C#, FTP, FTP component, FTPS, VB.NET | Comments Off on FTP Active vs Passive
Wednesday, October 19th, 2011
With Ftp.dll .NET FTP component establishing connection using default port is easy:
// C#
client.Connect("ftp.example.com");
' VB.NET
client.Connect("ftp.example.com")
If you need to specify different port just use overloaded version of Connect method:
// C#
client.Connect("ftp.example.com", 999);
// -or-
client.Connect("ftp.example.com", 999, false);
' VB.NET
client.Connect("ftp.example.com", 999)
' -or-
client.Connect("ftp.example.com", 999, False)
If you are using SSL:
// C#
client.ConnectSSL("ftp.example.com", 999);
// -or-
client.Connect("ftp.example.com", 999, true);
' VB.NET
client.ConnectSSL("ftp.example.com", 999)
' -or-
client.Connect("ftp.example.com", 999, True)
You can also specify the port range used in Active mode.
// C#
client.ActiveModePorts = new Range(1024, 1025);
' VB.NET
client.ActiveModePorts = New Range(1024, 1025)
You can set the IP address announced to the FTP server in Active mode data transfer.
By default, the value of this property is IPAddress.None which means that the address of the network interface is used instead.
// C#
client.ActiveModeAddress = IPAddress.Parse("ftp.example.com");
' VB.NET
client.ActiveModeAddress = IPAddress.Parse("ftp.example.com")
Posted in Ftp.dll | Tags: C#, FTP, FTP component, FTPS, VB.NET | Comments Off on Specify different port for FTP
Tuesday, November 16th, 2010
This blog post describes hot to check the file checksum (hash) after upload to FTP server. Ftp.dll .NET FTP component supports most popular hashing algorithms like CRC, MD5 and SHA1.
First add appropriate namespaces:
// C# version
using Limilabs.FTP.Client;
using Limilabs.FTP.Client.Hash;
' VB.NET version
Imports Limilabs.FTP.Client
Imports Limilabs.FTP.Client.Hash
Then upload the file, ask the server for hash of the uploaded file, compute the local hash and compare them:
// C# version
using (Ftp client = new Ftp())
{
client.Connect("ftp.example.org");
client.Login("user", "password");
client.Upload("report.txt", @"c:\report.txt");
byte[] serverHash = client.GetFileHash(
"report.txt",
FtpHashType.CRC);
FileHash hash = new FileHash(FtpHashType.CRC);
bool hashIsValid = hash.IsValid(@"c:\report.txt", serverHash);
Console.WriteLine(hashIsValid);
client.Close();
}
' VB.NET version
Using client As New Ftp()
client.Connect("ftp.example.org")
client.Login("user", "password")
client.Upload("report.txt", "c:\report.txt")
Dim serverHash As Byte() = client.GetFileHash( _
"report.txt", _
FtpHashType.CRC)
Dim hash As New FileHash(FtpHashType.CRC)
Dim hashIsValid As Boolean = hash.IsValid("c:\report.txt", serverHash)
Console.WriteLine(hashIsValid)
client.Close()
End Using
You can use CRC, MD5 and SHA1 algorithms for hash verification.
You can download Ftp.dll FTP/FTPS client for .NET here.
Posted in Ftp.dll | Tags: C#, FTP, FTP component, FTPS, VB.NET | Comments Off on Verify file hash after FTP upload
Sunday, November 7th, 2010
Most likely your FTP server requires explicit SSL. So first try to connect without SSL:
// C#
client.Connect("ftp.example.org");
' VB.NET
client.Connect("ftp.example.org")
Then, before logging-in, start explicit SSL negotiation:
// C#
client.AuthSSL();
' VB.NET
client.AuthSSL()
Now, your connection is secured.
Remember that you can ignore SSL certificate errors using ServerCertificateValidate event:
// C# version
using (Ftp client = new Ftp())
{
// Use this line to validate self-signed certificates:
client.ServerCertificateValidate += ValidateCertificate;
client.Connect("ftp.example.org");
client.AuthSSL();
client.Login("username", "password");
foreach (FtpItem item in client.GetList())
{
if (item.IsFolder == true)
Console.WriteLine("[{0}]", item.Name);
else
Console.WriteLine("{0}", item.Name);
}
client.Close();
}
private static void ValidateCertificate(
object sender,
ServerCertificateValidateEventArgs e)
{
const SslPolicyErrors ignoredErrors =
SslPolicyErrors.RemoteCertificateChainErrors |
SslPolicyErrors.RemoteCertificateNameMismatch;
if ((e.SslPolicyErrors & ~ignoredErrors) == SslPolicyErrors.None)
{
e.IsValid = true;
return;
}
e.IsValid = false;
}
' VB.NET version
Using client As New Ftp()
' Use this line to validate self-signed certificates:
AddHandler client.ServerCertificateValidate, AddressOf ValidateCerificate
client.Connect("ftp.example.org")
client.AuthSSL()
client.Login("username", "password")
For Each item As FtpItem In client.GetList()
If item.IsFolder = True Then
Console.WriteLine("[{0}]", item.Name)
Else
Console.WriteLine("{0}", item.Name)
End If
Next
client.Close()
End Using
Private Sub ValidateCerificate( _
ByVal sender As Object, _
ByVal e As ServerCertificateValidateEventArgs)
Const ignoredErrors As SslPolicyErrors = _
SslPolicyErrors.RemoteCertificateChainErrors Or _
SslPolicyErrors.RemoteCertificateNameMismatch
If (e.SslPolicyErrors And Not ignoredErrors) = SslPolicyErrors.None Then
e.IsValid = True
Return
End If
e.IsValid = False
End Sub
You can download Ftp.dll FTP/FTPS client for .NET here.
Posted in Ftp.dll | Tags: C#, FTP, FTP component, FTPS, VB.NET | Comments Off on The handshake failed due to an unexpected packet format
Sunday, November 7th, 2010
If you get “The remote certificate is invalid according to the validation procedure” exception while trying to establish SSL connection, most likely your server certificate is self-signed or you used incorrect host name to connect (Host name must match the name on certificate, for example ftp.example.com and example.com may point to the same server, but certificate is issued only to ftp.example.com and this is the address you should use).
Good news is that you can accept self-signed certificates using Ftp.dll FTP and FTPS .NET component.
First you need to subscribe to ServerCertificateValidate event.
Then you need to create Validatemethod that validates the certificate (ignores certificate chain and name mismatch errors).
// C# version
using (Ftp client = new Ftp())
{
// we will use custom validation
client.ServerCertificateValidate +=
new ServerCertificateValidateEventHandler(Validate);
// Minimalistic version to accept any certificate:
//client.ServerCertificateValidate +=
// (sender, e) => { e.IsValid = true; };
client.ConnectSSL("ftp.example.org");
client.Login("username", "password");
foreach (FtpItem item in client.GetList())
{
if (item.IsFolder == true)
Console.WriteLine("[{0}]", item.Name);
else
Console.WriteLine"{0}", item.Name);
}
client.Close();
}
private static void Validate(
object sender,
ServerCertificateValidateEventArgs e)
{
const SslPolicyErrors ignoredErrors =
SslPolicyErrors.RemoteCertificateChainErrors | // self-signed
SslPolicyErrors.RemoteCertificateNameMismatch; // name mismatch
if ((e.SslPolicyErrors & ~ignoredErrors) == SslPolicyErrors.None)
{
e.IsValid = true;
return;
}
e.IsValid = false;
}
' VB.NET version
Using client As New Ftp()
' Use this line to validate self-signed certificates:
AddHandler client.ServerCertificateValidate, AddressOf Validate
client.ConnectSSL("ftp.example.org")
client.Login("username", "password")
For Each item As FtpItem In client.GetList()
If item.IsFolder = True Then
Console.WriteLine("[{0}]";, item.Name)
Else
Console.WriteLine("{0}", item.Name)
End If
Next
client.Close()
End Using
Private Sub Validate( _
ByVal sender As Object, _
ByVal e As ServerCertificateValidateEventArgs)
Const ignoredErrors As SslPolicyErrors = _
SslPolicyErrors.RemoteCertificateChainErrors Or _ ' self-signed
SslPolicyErrors.RemoteCertificateNameMismatch ' name mismatch
If (e.SslPolicyErrors And Not ignoredErrors) = SslPolicyErrors.None Then
e.IsValid = True
Return
End If
e.IsValid = False
End Sub
You can download Ftp.dll FTP/FTPS component for .NET here.
Posted in Ftp.dll | Tags: C#, FTP, FTP component, FTPS, VB.NET | 5 Comments »