IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Recuperer l'adresse MAC du client


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur android & Java Web application
    Inscrit en
    Avril 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur android & Java Web application
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 105
    Par défaut Recuperer l'adresse MAC du client
    Bonsoir la famille,

    j'ai petit soucis avec mon code

    je veux recuperer l'adresse Mac du client et comparé à celle de la base de données,

    en local le code s'execute sans erreur

    une fois que je deploie sur un serveur distant je recois une page blanche ou :

    Nom : erreur.PNG
Affichages : 2992
Taille : 17,3 Ko

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    try {
     
                    InetAddress ip = InetAddress.getLocalHost();
     
                    NetworkInterface network = NetworkInterface.getByInetAddress(ip);
     
                    byte[] mac = network.getHardwareAddress();
     
                    StringBuilder sb = new StringBuilder();
     
                    for (int i = 0; i < mac.length; i++) {
                        sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
                    }
     
                    Class.forName("com.mysql.jdbc.Driver");
     
                    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/guce", "root", "");
                    PreparedStatement pst = conn.prepareStatement("Select * from adress where mac=?");
                    pst.setString(1, sb.toString());
     
                    ResultSet rs = pst.executeQuery();
     
                    if (rs.next()) {
     
                        getServletContext().getRequestDispatcher("/login_login.jsp").forward(request, response);
     
                        conn.close();
     
                    } else {
                        getServletContext().getRequestDispatcher("/controlle.jsp").forward(request, response);
     
                        conn.close();
                    }
     
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (SocketException e) {
                    e.printStackTrace();
                }
    merci d'avance

  2. #2
    Membre extrêmement actif Avatar de ddoumeche
    Homme Profil pro
    Ingénieur recherche et développement
    Inscrit en
    Octobre 2007
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Singapour

    Informations professionnelles :
    Activité : Ingénieur recherche et développement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 711
    Par défaut
    Bonsoir,

    il n'est pas possible de récupérer l'adresse Mac d'un client car celle-ci est gérée par son réseau interne uniquement. Si tu en as absolument besoin, tu dois passer par une applet java ou créer un client lourd

    En outre rien ne garanti que l'adresse Mac d'un poste ne change pas: par un changement de carte réseau par exemple.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur android & Java Web application
    Inscrit en
    Avril 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur android & Java Web application
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 105
    Par défaut
    Merci pour la réponse

    est-ce que je peux avoir un exemple de votre solution

    merci d'avance !

  4. #4
    Membre extrêmement actif Avatar de ddoumeche
    Homme Profil pro
    Ingénieur recherche et développement
    Inscrit en
    Octobre 2007
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Singapour

    Informations professionnelles :
    Activité : Ingénieur recherche et développement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 711
    Par défaut
    Bonjour,

    attention c'est compliqué et cela tient de la magie noire. Et cela ne fonctionnera pas sur les derniers navigateurs comme Firefox & Chrome pour qui les applets sont désactivées.

    Néanmoins ce que j'ai fait est la chose suivante:

    1. Créer un projet éclipse avec une classe Java et un fichier Html
      MacAddressApplet.java (dossier applets)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
       
      package applets;
       
      import java.applet.*;
      import java.awt.*;
      import java.net.InetAddress;
      import java.net.NetworkInterface;
      import java.net.SocketException;
      import java.net.UnknownHostException;
       
      import netscape.javascript.JSObject;
      import netscape.javascript.*;
       
      public class MacAddressApplet extends Applet {
       
      	private static final long serialVersionUID = 2L;
      	private static String macAddress = null;
       
      	JSObject		hostJavascriptEngine = null;
       
      	public void init() {
      		macAddress = getMacAddr();
      	}
       
      	public void start() {
      		//ne marche pas sous l'appletrunner d'Eclipse bien sur 
      		try  {
      			hostJavascriptEngine = JSObject.getWindow(this);
      		} catch (netscape.javascript.JSException ex) {
      			ex.printStackTrace();
      		}		
      	}
       
      	public void stop() {
      	}
       
      	public void paint(Graphics g) {
      		// method to draw text on screen
      		if (macAddress !=null) {
      			g.drawString("Addresse Mac: "+macAddress, 20, 20);
      		}
      	}
       
      	public String getMacAddr() 
      	{
      		String macAddr = "";
      		try {
      			InetAddress addr = InetAddress.getLocalHost();
       
      			System.out.println(addr.getHostAddress());
      			NetworkInterface dir = NetworkInterface.getByInetAddress(addr);
      			byte[] mac = dir.getHardwareAddress();
       
      			macAddr = String.format("%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
       
       
      		} catch (UnknownHostException e) {
      			macAddr = e.getMessage();
      		} catch (SocketException e) {
      			macAddr = e.getMessage();
      		}
      		return macAddr;
      	}
      }
      macAddress.html

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
       
      <!DOCTYPE html>
      <html>
      <head>
      	<meta charset="UTF-8">
      	<title>MacAddress</title>
      </head>
      <body>
      	<!-- notez que la première partie du nom "applets." désigne le package et dnc le dossiers  -->
      	<applet code="applets.MacAddressApplet.class" archive="MacAddressApplet.jar" width="250" height="100" >
      	Votre navigateur ne supporte pas les applets
      	</applet> 
      </body>
      </html>
    2. créer un jar avec l'applet:
      jar.exe -cf c:\workspaces\mars\applets\MacAddressApplet.jar applets
    3. créer un certificat autosigné et signer la jar pour autoriser les méthodes protégées:
      keytool -genkey -keyalg rsa -alias MacAddressApplet
      keytool -selfcert -alias MacAddressApplet
      jarsigner MacAddressApplet.jar MacAddressApplet
    4. autoriser les urls en http://localhost dans le panneau de configuration Java, onglet sécurité, de Windows
      Nom : 2017-08-04 06_34_10-java.png
Affichages : 2869
Taille : 20,5 Ko
    5. déployer l'applet et le html sur le serveur web local et ouvrir l'url dans Internet Explorer


    On voit alors que l'applet récupère bien l'adresse Mac:
    Nom : 2017-08-04 06_38_11-MacAddress - Internet Explorer.png
Affichages : 2830
Taille : 5,5 Ko

    Mais il faut encore pouvoir l'envoyer dans le formulaire HTML (via la technologie Java To Javascript).. ce qui ne fonctionne pas via l'AppletRunner d'Eclipse.
    Et débuguer une applet dans un navigateur est compliqué.

    Une autre solution serait d'envoyer directement cette adresse mac via http depuis l'applet, exercice que je laisse à ta discrétion.

    C'est pourquoi je te déconseille fortement de te baser sur l'adresse Mac. Puis-je te demander pourquoi c'est faire ?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par opamao93 Voir le message
    Bonsoir la famille,

    j'ai petit soucis avec mon code

    je veux recuperer l'adresse Mac du client et comparé à celle de la base de données,
    Quel serait l'usage? L'addresse MAC est une informations privée spécifique au protocole réseau locaux. Une machine peut avoir plusieurs adresses MAC, il n'y a pas nécessairement de lien avec l'IP que tu vois, l'IP que tu vois n'est pas nécessairement celle du client, une adresse MAC ça se change, l'unicité bien que théoriquement garantie par les constructeur est mise à mal par le point précédent.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur android & Java Web application
    Inscrit en
    Avril 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur android & Java Web application
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 105
    Par défaut
    Apres plusieurs recherches

    J'ai trouvé un code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    try {
                    /*
                 * Get NetworkInterface for the current host and then read the
                 * hardware address.
                     */
                    Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
     
                    if (nis != null) {
                        while (nis.hasMoreElements()) {
                            NetworkInterface currentNI = nis.nextElement();
                            Enumeration<InetAddress> addresses = currentNI.getInetAddresses();
     
                            while (addresses.hasMoreElements()) {
                                InetAddress inetAddress = addresses.nextElement();
     
                                byte[] mac = currentNI.getHardwareAddress();
     
                                if (mac != null) {
                                    if (mac.length > 0) {
                                        String hostName = inetAddress.getHostName();
                                        String hostAddr = inetAddress.getHostAddress();
                                        out.println("HOSTNAME = " + hostName + " HOSTADDR = " + hostAddr);
     
                                        out.print(
                                                "Name: " + currentNI.getName() + " | "
                                                + "DisplayName: " + currentNI.getDisplayName() + " MAC: ");
     
                                        /*
                                     * Extract each array of mac address and convert it to hexa with the
                                     * following format 08-00-27-DC-4A-9E.
                                         */
                                        StringBuilder sb = new StringBuilder();
                                        for (int i = 0; i < mac.length; i++) {
                                            sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
     
                                        }
     
                                        out.println(sb.toString());
     
                                    }
     
                                } else {
     
                                    out.println("Address doesn't exist or is not accessible.");
     
                                }
     
                            }
     
                        }
     
                    } else {
     
                        out.println("Network Interface for the specified address is not found.");
     
                    }
     
                } catch (SocketException e) {
     
                    e.printStackTrace();
     
                }
    Ce code recupère les adresses MAC, lorsque je deploie l'application il recupère pour le server ce qui n'est pas normale

    Aidez-moi à recupere celui du client pas du server

    NB: les adresses Mac sont fixes

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par opamao93 Voir le message
    Ce code recupère les adresses MAC, lorsque je deploie l'application il recupère pour le server ce qui n'est pas normale
    Si c'est normal : tu exécutes le code sur le serveur, donc tu obtiens les interfaces réseau du serveur, donc les MAC address du serveur.

    Il est possible dans une servlet de récupérer l'ip du client (avec request.getRemoteAddr()), et encore, c'est l'adresse vue du serveur (penser au problématique de proxy, NAT, etc) mais pas la MAC address. Le seul moyen est comme on te la déjà indiqué : c'est le client qui doit te l'envoyer (donc exécuter un code dans le navigateur qui l'envoie au serveur), avec la problématique de la sécurité à contourner (et ce n'est pas simple), et comme l'indique @Tchize_, tu n'auras pas forcément une information pertinente.

    Tu n'as pas répondu à la question "Pourquoi tu voudrais avoir la MAC address du client" ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur android & Java Web application
    Inscrit en
    Avril 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur android & Java Web application
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 105
    Par défaut
    Pourquoi je voudrais avoir l'adresse MAC du client ?

    L'entreprise qui va utilisé l'application fixera les adresses Mac sur les PC aptes pour l'utilisation de l'application

    elle impose qu'au lancement de l'application, l'application doit être capable de vérifier l'adresses Mac du PC

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas à l'application web de faire ce genre de choses. C'est une problématique d'exploitation et il y a des systèmes (proxy, firewall...) et applications qui permettent de faire ça.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [Réseau] Recuperer l'adresse MAC du client
    Par sorry60 dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2006, 19h37
  2. recuperer l"'adresse mac
    Par jj del amorozo dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2006, 11h37
  3. comment, en C++, recuperer l'adresse mac sous win98?
    Par stefane1981 dans le forum Windows
    Réponses: 2
    Dernier message: 06/10/2005, 19h12
  4. comment recuperer l'adresse mac en C++ sous win98
    Par stefane1981 dans le forum MFC
    Réponses: 1
    Dernier message: 06/10/2005, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo