Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di Shork
    Registrato dal
    Dec 2001
    Messaggi
    259

    MAC ADDRESS e IP

    Ciao a tutti,

    io ho questa classe che analizza tutte le interfacce di rete di un pc e ne restituisce il MAC ADDRESS, è possibile sapere qual'è quella effettivamente connessa al router?

    Grazie

    Codice PHP:
    import java.awt.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.JApplet;


    public class 
    macReveal extends JApplet  {

        public 
    String getMacAddresses() {
            
    String result="";

            try {
                
    Enumeration e=NetworkInterface.getNetworkInterfaces();

                while(
    e.hasMoreElements()){
                    
    NetworkInterface ni=(NetworkInterface)e.nextElement();
                    
    byte[] idr=ni.getHardwareAddress();

            
    Enumeration addresses=ni.getInetAddresses(); 
                    if(
    idr!=null && idr.length>0){
                        
    String hexstr="";
                        for(
    int z=0;z<idr.length;z++){
                            
    hexstr += Integer.toHexString(idr[z])+":";
                        }
                        
    hexstr=hexstr.substring(0,hexstr.length()-1);
                        
    result+=hexstr+",";
                    }
                }
                
    result=result.substring(0,result.length()-1);

            } catch (
    Exception ex) {
            }


            return 
    result;
        }


  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: MAC ADDRESS e IP

    Originariamente inviato da Shork
    io ho questa classe che analizza tutte le interfacce di rete di un pc e ne restituisce il MAC ADDRESS, è possibile sapere qual'è quella effettivamente connessa al router?
    La mia idea è questa: se riesci a creare un Socket verso una porta del router, allora puoi chiamare getLocalAddress() sul Socket per sapere quale è l'indirizzo locale a cui il socket è "legato" (bound).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Shork
    Registrato dal
    Dec 2001
    Messaggi
    259
    L'idea sembra buona anche se, conoscendo molto poco java, non saprei come realizzarla...
    Ora però ho un problema, la classe riportata sopra mi fà una cosa strana, su un notebook (OS Vista) con 2 schede di rete mi viene restituito lo stesso mac address!!!
    Se mi faccio stampare a video il risultato del metodo getHardwareAddress() ottengo 2 valori uguali, rispettivamente [B@118278a e [B@13bdd36 (che razza di risultato è???) ma se ciclo gli array ottengo gli stessi elementi (0,27,36,-115,74,-61).

    Qualcuno mi può fare un oò di chiarezza...

    Grazie in anticipo

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shork
    Se mi faccio stampare a video il risultato del metodo getHardwareAddress() ottengo 2 valori uguali, rispettivamente [B@118278a e [B@13bdd36 (che razza di risultato è???)
    Questo è il risultato della stampa di un reference nel caso in cui l'oggetto (ed è il caso degli array) non fornisca una implementazione di toString() che ritorna un qualcosa di più "human readable". E comunque mi sembra strano che hai questo output, visto che nel tuo codice non vedo il print di un reference.

    Io comunque ho fatto una prova con questo codice che ho scritto:

    codice:
    import java.net.*;
    import java.util.*;
    
    public class NetworkInterfacesList
    {
        public static void main (String[] args)
        {
            try
            {
                Enumeration<NetworkInterface> enumInt = NetworkInterface.getNetworkInterfaces ();
    
                while (enumInt.hasMoreElements ())
                {
                    NetworkInterface netInt = enumInt.nextElement ();
    
                    System.out.println ("Interface: " + netInt.getDisplayName ().trim ());
    
                    byte[] hwaddr = netInt.getHardwareAddress ();
    
                    if (hwaddr != null)
                    {
                        System.out.print ("    HW Addr: ");
    
                        for (int i = 0; i < hwaddr.length; i++)
                            System.out.format (i == 0 ? "%02X" : "-%02X", hwaddr[i]);
    
                        System.out.println ();
                    }
    
                    Enumeration<InetAddress> enumAddr = netInt.getInetAddresses ();
    
                    while (enumAddr.hasMoreElements ())
                    {
                        InetAddress addr = enumAddr.nextElement ();
    
                        System.out.println ("    IP: " + addr);
                    }
                }
            }
            catch (Exception e)
            {
                System.out.println (e);
            }
        }
    }
    Sul mio PC (Win2000) stampa:

    codice:
    Interface: MS TCP Loopback interface
        IP: /127.0.0.1
    Interface: NDIS 5.0 driver
        HW Addr: 00-10-A7-13-73-02
        IP: /192.168.1.75
        IP: /192.168.1.73
        IP: /192.168.1.74
    Nota che ho una sola interfaccia fisica con IP ....73 e con 2 alias ...74 e ...75.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Shork
    Registrato dal
    Dec 2001
    Messaggi
    259
    I print li ho aggiunti in seguito...
    Approfitto della tua disponibilità... siccome il mio obbiettivo finale è un'applet e la classe mi deve restituire una stringa di tutti i mac address delle interfacce di rete presenti sul pc, come posso trasformare il tuo "System.out.format" in modo da averlo come result (stringa) del metodo?

    Grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shork
    I print li ho aggiunti in seguito...
    Ah ecco!

    Originariamente inviato da Shork
    come posso trasformare il tuo "System.out.format" in modo da averlo come result (stringa) del metodo?
    Scusa ... perché non puoi usare il format()?? Se stai usando getHardwareAddress() di NetworkInterface allora stai usando come minimo Java 6.

    Il format l'ho usato solamente per poter formattare in modo semplice e veloce un byte su 2 digit in esadecimale. Cosa che comunque è fattibile, con un po' più di codice, come hai fatto tu con Integer.toHexString ma prestando attenzione ad alcune cose. Il byte potrebbe essere negativo e in tal caso otterresti es. ffffffa7 quindi devi fare una AND con 0xFF prima di passarlo a toHexString. Inoltre il risultato può essere di 1 solo digit e le lettere sono in minuscono. Basta usare toUpperCase() e aggiungere un '0' se necessario.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di Shork
    Registrato dal
    Dec 2001
    Messaggi
    259
    Allora, forse mi sono espresso male...
    Tu usi System.out.format e utilizzi la funzione per mostrare in output nella console java il valore, io devo utilizzare il format per farmi ritornare una stringa da poter manipolare alla fine della classe...

    Tipo una cosa del genere:

    String tmp = format (i == 0 ? "%02X" : "-%02X", hwaddr[i]);


    Si può fare...?

    Grazie

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shork
    Allora, forse mi sono espresso male...
    Tu usi System.out.format e utilizzi la funzione per mostrare in output nella console java il valore, io devo utilizzare il format per farmi ritornare una stringa
    Ah ok ... è che pensavo lo sapessi ..... format() è disponibile in diverse classi, tra cui PrintStream, PrintWriter e ... ta dahh ... pure String. (vedi documentazione)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di Shork
    Registrato dal
    Dec 2001
    Messaggi
    259
    Scusami tu ma sono ai primi approcci con Java...
    Quindi per salvare il risultato della funzione format in una stringa come devo fare?

    Grazie ancora

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shork
    Quindi per salvare il risultato della funzione format in una stringa come devo fare?
    es.:
    String s = String.format ("%x", 123);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.