如何确定IP地址是否可路由?

时间:2012-11-16 01:40:56

标签: c#

我有一台FTP服务器,它为PASV命令返回一个无效的IP地址。 Filezilla会自动检测到这一点。如何在C#中验证IP地址以确保它是可路由的?

这是filezilla在日志中的含义: 命令:PASV 响应:227进入被动模式(10,46,169,44,21,124)。 状态:服务器发送带有不可路由地址的被动回复。改为使用服务器地址。

1 个答案:

答案 0 :(得分:2)

对于检查私有地址(不可路由地址的最大子集),您可能会这样:

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)));
}

还有更多不可路由的地址(例如环回,多播和实验块),但您似乎不太可能看到这些地址。