这么底层的东东,java的 api里是没有的,实在是“想”的厉害的话可以用些小手段

解决方案 »

  1.   

    可以调用系统的api试试看,java的api是没有提供这样的方法的,可以用用windows的configip命令得到阿!
      

  2.   

    我的系统不是windows啊,这该怎么办啊?
      

  3.   

    感觉只能调用C的DLL了,下面是我的程序,已经编译通过。
    <JAVA>
    package study;
    public class MacRead {   public native String readMac();
       public MacRead() {
       }
       public static void main(String[] args) {
          System.loadLibrary("MacDll");
          MacRead mac= new MacRead();
          System.out.println(mac.readMac());
       }
    }
    <VS.NET 2003编译>
    JNIEXPORT jstring JNICALL Java_study_MacRead_readMac
    (JNIEnv *env, jobject){
    CString strMAC; typedef struct _ASTAT_
       {
          ADAPTER_STATUS adapt;
          NAME_BUFFER    NameBuff [30];
       }ASTAT, * PASTAT;
        NCB ncb;
        UCHAR uRetCode;
    ASTAT Adapter;
    BYTE MacAddr[6]; memset( &ncb, 0, sizeof(ncb) );
        ncb.ncb_command = NCBRESET;
    ncb.ncb_lana_num = 0;
    uRetCode = Netbios( &ncb );
    if (uRetCode!=0)
        {
      strMAC = "错误";
      AfxMessageBox(strMAC);
        } memset( &ncb, 0, sizeof(ncb) );
    ncb.ncb_command = NCBASTAT;
    ncb.ncb_lana_num = 0;
    strcpy( (char *)ncb.ncb_callname, "* " );
    ncb.ncb_buffer =(unsigned char *) &Adapter;
    ncb.ncb_length = sizeof(Adapter);
        
    uRetCode = Netbios( &ncb );
    if ( uRetCode == 0 )
    {
    for( int i = 0; i < 6; i++ )
    MacAddr[i] = Adapter.adapt.adapter_address[i];
    }
    else
    {
    strMAC = "Init Error!";
      AfxMessageBox(strMAC);
    }

    CHAR szAddr[20];
    wsprintf(szAddr,_T("%02x-%02x-%02x-%02x-%02x-%02x"),MacAddr[0],
    MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]);
    _tcsupr(szAddr); strMAC = szAddr;
    return env->NewStringUTF(strMAC);

    }
      

  4.   

    调用系统命令ipconfig /all。
    public static void main(String args[]) throws Exception{
            String command = "c:\\winnt\\System32\\cmd.exe ";
            try {
                Process p = Runtime.getRuntime().exec(command);
                OutputStream ou = p.getOutputStream();
                ou.write("ipconfig /all\n".getBytes());
                ou.flush();
                ou.write("exit\n".getBytes());
                ou.flush();
                ou.close();
                InputStream in = p.getInputStream();
                char[] test1 = null;
                int b;
                String ii = "test";
                while ((b=in.read())!=-1){
                    ii += String.valueOf((char)b);
                }
                for(int i=0;i<ii.length();i++){
                    if(ii.charAt(i) =='P' && ii.charAt(i+1)=='h'){
                        System.out.print("网卡地址是:");
                        for(int j=i+36;j<i+53;j++){
                            System.out.print(ii.charAt(j));
                        }                }
                }
                in.close();            //p.waitFor();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
      

  5.   

    你使用jpcap就可以了。
     pcap = new PacketCapture();
     String device = pcap.findDevice();
     System.out.println("the device is:" + device);
      

  6.   

    要通过jni接口实现本地化代码来获得了
      

  7.   

    呵呵, 如果是win2000,可以用一些法子
    比如执行ipconfig,arp之类的程序,获取输出
    然后去判断,也是可以的
      

  8.   

    to unsalted(icebird) 
    如果要获得局域网所有机子上的网卡物理地址怎么做呀.!
      

  9.   

    javaVegetable(风) 
    我用了,但不知道怎么不行?我不知道怎么用a?
    各位大虾,还有什么简单的方法阿
      

  10.   

    如果要获得局域网所有机子上的网卡物理地址怎么做呀.!
    用 arp 命令呀!!
      

  11.   

    先ping hostip
    然后arp -a hostip
      

  12.   

    to zceast(zceast) :JNIEXPORT jstring JNICALL Java_study_MacRead_readMac
    (JNIEnv *env, jobject)什么意思?
      

  13.   

    to  mashaw(寒玉) :
    这个是由javah生成的c/c++的函数原形