2009-09-18 25 views
26

Ich erstelle eine Intranetsite, die verschiedene Listen basierend auf dem Computernamen anzeigt, da sich verschiedene Computer in verschiedenen Bereichen befinden. Gibt es eine Möglichkeit (innerhalb eines Controllers oder Modells), den Computernamen des Clients zu ermitteln?Ermitteln des Computernamens des Kunden

Ich habe system.environment.machinename ausprobiert, aber das gibt nur den Namen des Servers zurück, irgendwelche anderen Ideen?

Antwort

34

Ich habe es funktioniert mit dem folgenden:

string IP = Request.UserHostName; 
string compName = CompNameHelper.DetermineCompName(IP); 

Code von compnamehelper:

public static string DetermineCompName(string IP) 
{ 
    IPAddress myIP = IPAddress.Parse(IP); 
    IPHostEntry GetIPHost = Dns.GetHostEntry(myIP); 
    List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList(); 
    return compName.First(); 
} 
+3

Beachten Sie, dass dies nicht zu dem erwarteten Ergebnis führt, wenn sich der Client hinter einem NAT befindet, aber es besteht die Möglichkeit, dass es kein Problem ist, da Sie sich in einem "Intranet" befinden. – Niklas

+0

Es funktioniert wie ein Charme. Aber kleine Änderungen, die ich machen musste, um die IP zu bekommen. Zeichenfolge IP = HttpContext.Request.UserHostName.ToString(); Rest sind ehrfürchtig arbeiten .. +1 – Vinnie

+0

Nun, es funktioniert möglicherweise nur im lokalen Netzwerk, aber es funktioniert nicht im Internet. – CodeIt

0

Die einzige Möglichkeit, den Client zu untersuchen, ist über die ServerVariables-Sammlung auf dem Request-Objekt (sollte für MVC-Code verfügbar sein).

Weitere Informationen finden Sie unter http://www.4guysfromrolla.com/webtech/092298-3.shtml. REMOTE_HOST und REMOTE_ADDR sehen wie Kandidaten aus.

0

Ich glaube, du bist besser dran, eine dieser Methoden unter Verwendung eines Benutzers an einen Ort zu binden:

  • ein Cookie, sobald der Benutzer selbst wählt ihren Standort
  • mit der Benutzeranmeldung gesetzt die Website, so dass Sie sie eindeutig, dass die Art und Weise
  • Erinnerung an Benutzer von IP-Adresse

Es verfolgen kann, ist keine Möglichkeit, einzigartige Remote-Host-Namen sind zu gewährleisten. Das gleiche Problem tritt bei IP wegen Proxies, dynamischer IP, etc. auf, aber ich denke, es wird ein wenig zuverlässiger sein. Außerdem können Sie Geolocation anhand der IP-Adresse durchführen.

3

Nein. Der Computername des Clients ist in keiner Weise auf dem Server verfügbar. Dies ist die Art der http-Anfrage-Antwort. Sie können nur seine IP-Adresse haben.

Eine Problemumgehung könnte sein, Maschine auf dem Client von Flash/Silverlight (ich bezweifle JavaScript) und in Cookie, die auf dem Server mit jeder Anfrage verfügbar ist, abzurufen. Aber es gibt einen ganzen Stapel Probleme mit diesem Ansatz.

+1

gibt es ein Verfahren Computer zum Nachschlagen Namen mit einer IP? – Jimmy

+0

Sie können Computername von seiner IP abrufen, indem Sie einen Anruf an DNS-Server –

1

Try this:

string name = Request.UserHostName; 
+0

nicht funktioniert, Name des Webservers zurückgegeben. Gleiches gilt für System.Net. –

-2

Hier ist eine IE-only Lösung. Es funktioniert in IE8 mit mehreren Sicherheitswarnungen.

<script type="text/javascript" language="javascript"> 
    var ax = new ActiveXObject("WScript.Network"); 
    document.write(ax.UserName + '<br />'); //logged in account name 
    document.write(ax.ComputerName + '<br />'); //Windows PC name 
</script> 
3

Code in VB:

Dim myIP As IPAddress = IPAddress.Parse(Request.UserHostName) 
    Dim GetIPHost As IPHostEntry = Dns.GetHostEntry(myIP) 
    Dim compName As List(Of String) = GetIPHost.HostName.ToString.Split("").ToList 

    return(compName.First) 
Verwandte Themen