3
votes

Comment obtenir le nom de l'ordinateur des clients en utilisant asp.net mvc?

Je supporte un système qui a besoin d'obtenir le nom de l'ordinateur du client. J'essaie différents codes mais tous n'obtiennent que le nom de l'ordinateur du serveur hôte, pas le nom de l'ordinateur du client. Voici l'extrait:

 public void CreateEvents(string className, string eventName, string eventData, string userId)
    {
        string hostName = Dns.GetHostName(); // Retrive the Name of HOST  
        string compname= HttpContext.Current.Request.UserHostAddress;


        var browser = HttpContext.Current.Request.Browser.Browser + " " + HttpContext.Current.Request.Browser.Version;

        if (string.IsNullOrEmpty(userId))
        {
            userId = compname;
        }

        var entity = new EventLog
        {
            ClassName = className,
            EventName = eventName,
            EventData = eventData,
            IpAddress = ipAddress,
            Browser = browser,
            UserId = userId,
            CreatedDate = DateTime.Now
        };

        _db.EventLogs.Add(entity);
        _db.SaveChanges();
    }

    public string GetIpAddress()
    {
       HttpContext context = System.Web.HttpContext.Current;
        string compname=    context.Request.UserHostAddress; //System.Net.Dns.GetHostName();
        return compname;
    }

Merci d'avance!


1 commentaires

Le serveur et le navigateur client sont dans le même réseau?


3 Réponses :


-1
votes

Vous pouvez obtenir le nom de l'ordinateur comme suit:

Server.MachineName.ToString()

Vous pouvez obtenir le nom du serveur d'hébergement comme suit:

Environment.MachineName.ToString()


7 commentaires

Certains serveurs d'hébergement bloquent ces fonctions pour ne pas exposer ces informations, par ex. Serveurs IBM Bluemix.


J'essaye ceci mais ce que j'obtiens est le nom d'ordinateur de serveur d'hôte pas le client.


Ce n'est pas ce que recherche l'OP.


Voilà comment cela fonctionne exactement sur mon projet, comme je l'ai dit plus tôt, cela dépend du serveur.


Serveur d'hébergement. Cela dépend de l’endroit où il est hébergé.


Y a-t-il un moyen de résoudre mes problèmes? Où puis-je modifier les paramètres pour que je puisse obtenir le nom de l'ordinateur du client? Mon serveur d'hébergement est mon ordinateur uniquement et j'utilise un autre ordinateur pour tester mon code s'il fonctionne.


L'OP demande un client , pas un serveur



3
votes

Non, vous ne pouvez pas , sauf si le client envoie de telles informations lors des requêtes HTTP. Par "client", je fais référence à tout - une application, un navigateur, etc.

Vous pouvez inspecter votre propre flux de requêtes de navigateur à l'aide des outils de développement de navigateur standard et voir exactement les informations que votre navigateur envoie. Il n'aura pas le nom de votre machine (à moins que quelque chose dans votre machine ne soit et que cela poserait probablement un problème).

Cela dit, Les données d'en-tête HTTP sont ce que vous avez en plus des informations réseau standard telles que l'adresse IP (qui n'est pas non plus garantie d'être l'adresse IP du client - cela pourrait être l'adresse réseau du client) . Le plus proche auquel vous pouvez vous rendre est hostname s'il existe, et même dans ce cas, tout comme l'adresse IP, il n'est pas garanti qu'il s'agisse du nom de la machine.

Une exception possible serait dans un réseau interne (LAN).


2 commentaires

Merci d'avoir répondu. Mais dans mon cas, je veux obtenir le nom de l'ordinateur du client et l'enregistrer dans la base de données pour être l'ID de cette machine plutôt que l'adresse IP lors de la connexion au système. L'utilisateur ne peut pas se connecter au système à moins que la machine / l'ordinateur qu'il utilise ne soit autorisé ou enregistré dans le système.


@Bot Sauf si vous êtes dans un environnement contrôlé (LAN) - votre réseau, tous les clients sont dans votre réseau, où vous pouvez contrôler tous vos clients, comme ci-dessus, vous ne pouvez pas . Vous devez repenser votre système d'autorisation.



0
votes

vous pouvez utiliser HttpContext.Request.UserHostAddress pour obtenir l'adresse IP, également Request a UserHostName mais je ne suis pas sûr de cette propriété


0 commentaires