PASVコマンドに対して無効なIPアドレスを返すFTPサーバーがあります。Filezillaはこれを自動的に検出します。C#でIPアドレスを検証して、ルーティング可能であることを確認するにはどうすればよいですか?
ファイルzillaのログの内容は次のとおりです。コマンド:PASV応答:227パッシブモードに入る(10,46,169,44,21,124)。ステータス:サーバーがルーティングできないアドレスでパッシブ応答を送信しました。代わりにサーバーアドレスを使用します。
PASVコマンドに対して無効なIPアドレスを返すFTPサーバーがあります。Filezillaはこれを自動的に検出します。C#でIPアドレスを検証して、ルーティング可能であることを確認するにはどうすればよいですか?
ファイルzillaのログの内容は次のとおりです。コマンド: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)));
}
ルーティング不可能なアドレス(ループバック、マルチキャスト、実験的なブロックなど)は他にもありますが、それらが表示される可能性は低いようです。