1.问题描述:
远程访问FTP服务器报错: 501 Server cannot accept argument.
2.原因:
我的电脑是多网口,且其它网口也连接有设备
3.验证IP是否为局域网地址
原文: https://zhuanlan.zhihu.com/p/136537441
// 验证IP是否为局域网地址
bool IsPrivateNetwork3(string ipv4Address)
{
if (IPAddress.TryParse(ipv4Address, out var ip))
{
byte[] ipBytes = ip.GetAddressBytes();
if (ipBytes[0] == 10) return true;
if (ipBytes[0] == 172 && ipBytes[1] >= 16 && ipBytes[1] <= 31) return true;
if (ipBytes[0] == 192 && ipBytes[1] == 168) return true;
}
return false;
}
4.使用局域网地址IP发送PORT命令
[Obsolete]
private void CreateDataListener(ref TcpListener listener)
{
IPAddress localaddr = Dns.Resolve(Dns.GetHostName()).AddressList[0];//Dns.Resolve(Dns.GetHostName()).AddressList[0];
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
{
string AddressIP = _IPAddress.ToString(); //获取本地的IP地址
if (IsPrivateNetwork3(AddressIP)) //验证IP是否为局域网地址
{
localaddr = _IPAddress;
}
}
}
listener = new TcpListener(localaddr, 0);
listener.Start();
IPEndPoint localEndpoint = (IPEndPoint) listener.LocalEndpoint;
int num = localEndpoint.Port >> 8;
int num2 = localEndpoint.Port & 0xff;
this.SendCommand("PORT " + localEndpoint.Address.ToString().Replace(".", ",") + "," + num.ToString() + "," + num2.ToString());
if ((this.mIntReplyCode != 200) && (this.mIntReplyCode != 0xe2))
{
throw new IOException(this.mStrReply.Substring(4));
}
}