DNSやホストファイルを変更せずに、ホスト名を特定のIPに解決する方法があるかどうかを調べようとしています。
C#を使用して、クライアントからサーバーにリクエストを送信していますが、証明書がリクエストを適切に認証するように、リクエストでホスト名を使用する必要があります。ただし、私のプログラムは管理者権限なしで実行することを目的としているため、ホストファイルを変更できません。私は正しいIPとホスト名を持っていますが、コンピューターにホスト名をIPに解決させる他の方法はありますか?
これを解決する最も簡単な方法は、ホストファイルを変更する権限を持つサービスを作成し、メインプログラムからそのサービスを呼び出すことです。サービスは単一のコマンドを実行して終了します。サービスは昇格されたステータスを持つことができるため、基本的に、標準のユーザープログラム内に管理者権限をカプセル化できます。
HTTPリクエストを行う場合は、ホスト名を解決する必要はありません。URLでIPアドレスを使用し、HTTPリクエストでホストヘッダーを渡します。
更新:申し訳ありませんが、証明書の要件が表示されませんでした。インストール中にhostsファイルを変更できるはずです(インストールは通常、管理者権限で行われるため)。127.0.0.1(ローカルマシン)を指すように、関心のあるホスト名を追加します。次に、アプリはリスニングソケットを開き、プロキシとして機能して、データを実際のWebサーバーに送信できます。これは、ファイアウォールが有効になっているクライアントによっては機能する場合と機能しない場合があります。
public bool ModifyHostsFile(string sEntryIPAddr, string sEntryURL)
{
try
{
using (StreamWriter w = File.AppendText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"drivers\etc\hosts")))
{
w.WriteLine(sEntryIPAddr+" "+ sEntryURL);
return true;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
これは私のために働いた:
手順1.Windowsのスタートメニューを開き、メモ帳アプリケーションを検索して、メモ帳アイコンを右クリックします。
ステップ2.「管理者として実行」を選択し、メモ帳内で、hostsファイルを含むフォルダー(/ windows / system32 / drivers / etc)を参照します。