2012-06-11 4 views
5

Ich versuche herauszufinden, ob es eine Möglichkeit gibt, einen Hostnamen auf eine bestimmte IP-Adresse ohne DNS oder Host-Datei ändern zu lassen.Host-Namensauflösung, ohne die Hosts-Datei zu ändern

Mit C#, ich bin eine Anfrage von Client zu Server, aber ich muss den Hostnamen in der Anfrage verwenden, damit die Zertifikate die Anfrage ordnungsgemäß authentifizieren. Mein Programm soll jedoch ohne Admin-Rechte laufen, daher kann ich die Host-Datei nicht ändern. Ich habe die richtige IP und den Host-Namen, gibt es eine andere Möglichkeit, den Computer den Host-Namen auf die IP zu lösen?

+1

Was stimmt nicht mit dem DNS-Server, den der Computer verwendet, dass es den Hostnamen nicht automatisch auf die richtige IP auflöst? – cadrell0

+0

Der Server ist nicht auf DNS, daher ist die Auflösung nicht möglich. – akroy

Antwort

2

Es sieht so aus, als ob die einfachste Möglichkeit darin besteht, einen Dienst mit den Rechten zum Ändern der Host-Datei zu erstellen und dann diesen Dienst vom Hauptprogramm aus aufzurufen. Der Dienst führt einen einzelnen Befehl aus und wird beendet. Da ein Service einen erhöhten Status haben kann, können Sie im Wesentlichen Admin-Rechte innerhalb eines Standard-Benutzerprogramms kapseln.

0

Einfache Antwort: Nein.

(Leider ist die Antwort zu einfach und klein für SO).

1

Wenn Sie eine HTTP-Anfrage stellen, müssen Sie den Hostnamen nicht auflösen. Verwenden Sie die IP-Adresse in der URL und übergeben Sie den Host-Header in Ihrer HTTP-Anfrage.

HttpWebRequest.Host Property

Update: leider nicht die Zertifikate Anforderungen sehen. Ich denke, Sie sollten in der Lage sein, die Hosts-Datei während der Installation zu ändern (da die Installation normalerweise unter Admin-Rechten erfolgt). Fügen Sie den gewünschten Hostnamen hinzu, um auf 127.0.0.1 (lokaler Computer) zu zeigen. Dann kann Ihre App einen Listening-Socket öffnen und als Proxy fungieren und die Daten zum tatsächlichen Webserver leiten. Dies kann oder kann nicht funktionieren, abhängig davon, ob der Client eine Firewall aktiviert hat.

+1

Wenn er das SSL-Zertifikat ausführt, schlägt die Validierung fehl, da der Name des Zertifikats wahrscheinlich einen tatsächlichen DNS-Namen enthält, der nicht mit der IP übereinstimmt, die in der Eigenschaft 'Host' verwendet wird. Dies ist, was er zu vermeiden versucht. – CodingGorilla

+0

Ich verwende RasDial, um eine Verbindung herzustellen, so dass es aussieht (ich bin kein RAS-Experte) Ich kann eine "Telefonnummer" angeben, die entweder eine IP oder ein Hostname ist. Die Zertifizierung für die Verbindung funktioniert nur, wenn ich den Hostnamen als Telefonnummer verwende. – akroy

+0

@CodingGorilla siehe den aktualisierten Beitrag. –

-3

dies für mich gearbeitet:

Schritt 1. Öffnen Sie Ihr Windows-Startmenü für die Editor-Anwendung suchen und dann das Notizbuch-Symbol rechts klicken.

Schritt 2. Wählen Sie "Als Administrator ausführen" und navigieren Sie dann im Editor zum Ordner (/ windows/system32/drivers/etc), der die hosts-Datei enthält.

+0

Dies ist nicht programmatisch, und es verwendet Admin-Rechte ... – akroy

-1
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; 
     } 
    } 
+0

Bitte fügen Sie eine Erklärung, warum dieser Code das OP hilft. Dies wird helfen, eine Antwort zu liefern, von der zukünftige Zuschauer lernen können.Weitere Informationen finden Sie unter [Antwort]. –

+0

OP möchte die Hosts-Datei nicht ändern –

Verwandte Themen