我有一个 FTP 服务器,它为 PASV 命令返回无效的 IP 地址。Filezilla 会自动检测到这一点。如何在 C# 中验证 IP 地址以确保它是可路由的?
以下是 filezilla 在日志中的内容:命令:PASV 响应:227 进入被动模式 (10,46,169,44,21,124)。状态:服务器发送了带有不可路由地址的被动回复。改用服务器地址。
我有一个 FTP 服务器,它为 PASV 命令返回无效的 IP 地址。Filezilla 会自动检测到这一点。如何在 C# 中验证 IP 地址以确保它是可路由的?
以下是 filezilla 在日志中的内容:命令:PASV 响应:227 进入被动模式 (10,46,169,44,21,124)。状态:服务器发送了带有不可路由地址的被动回复。改用服务器地址。
为了检查私有地址(不可路由地址的最大子集),你可以这样:
public static bool IsPrivateAddress(this IPAddress addr)
{
if(addr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
{
return addr.IsIPv6LinkLocal || addr.IsIPv6SiteLocal;
}
var bytes = addr.GetAddressBytes();
return
((bytes[0] == 10) ||
((bytes[0] == 192) && (bytes[1] == 168)) ||
((bytes[0] == 172) && ((bytes[1] & 0xf0)==16)));
}
还有更多不可路由的地址(例如环回、多播和实验块),但您似乎不太可能看到这些。