a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 159|回复: 1

[红帽认证] J2SE实现windows下读取网卡的物理地址

[复制链接]
发表于 2012-8-4 12:19:50 | 显示全部楼层 |阅读模式
这个例子使用了J2SE5.0的ProcessBuilder类执行外部的程序,相对于 Runtime.exec ,它更方便,可以设置环境变量等。 7 g4 V. w! I2 T: P( _- R
) A+ {7 C$ Q& z, B  l8 o: F0 `8 t/ |
package com.kuaff.jdk5package;
, R! |; R! A) M' B  S& F' l' O3 h9 H6 P: V9 B+ Q
import java.io.IOException; ! _. ?: r" z" c! h
import java.io.InputStream;
* d; o% J3 q5 d0 zimport java.util.ArrayList; 9 k- U2 K8 `, _9 E8 I& u% d
import java.util.List;
; \% E" t' R' n$ V6 z+ c2 o
: A$ J/ o# n0 a: h9 p5 \$ _public class ProcessBuilderShow
9 s) p# {& Q6 y{
. ~& m# n% V* A    public static List getPhysicalAddress()   v, M4 H- d# j* Q
    { 6 f; f1 ^, p) Z( {. K  z
        Process p = null; 6 e- [( T% D7 N! g2 R  M
        //物理网卡列表 7 s4 f/ V6 {4 P
        List address = new ArrayList(); 1 R5 t8 Y5 @0 }8 Q
& i- D6 Q, N1 n/ X' z, Q
        try . n/ t; d6 y! H' ?, i
        {
) {8 _" ^- d4 K/ A1 t2 o! j            //执行ipconfig /all命令 1 l0 a" l' u5 H- n. P$ o1 u& D- t
            p = new ProcessBuilder("ipconfig", "/all").start(); $ Y8 o% c! X  V- m  t: t1 i6 D
        }
, n" J2 e# K; m        catch (IOException e)
  p$ e( [0 U7 _& P& V5 }        { 1 n+ B& {9 |- y( L( W. W
            return  address; - G5 B: v& f0 ~$ R$ g  a
        } + z5 ^$ Z, |% u( ~2 o
        byte[] b = new byte[1024]; # t5 v# T5 j+ k8 @2 c7 K
        StringBuffer sb = new StringBuffer();
) Y0 U4 X2 o5 s$ G! e        //读取进程输出值 ; a# D& P4 ~- ~9 O5 N0 F
        InputStream in = p.getInputStream();   D. I  A: ^# m9 u: h! X& E
        try
0 E" D( D: [2 B" ^; `        { % c0 |1 C4 r  ]' }9 D0 f
            while (in.read(b)>0)
: t* t8 ^  j9 [            { 1 r$ e9 v3 V8 C6 D6 g& S& k
                sb.append(new String(b));
7 l1 Q# a4 B* [% D            }
0 V5 o% @+ `# _2 |        }
) D' G  r; I/ K+ S3 ~) ]        catch (IOException e1)
5 n9 k6 @6 M8 X- a9 L0 c        { 2 ]# g& U% W6 T" e9 n+ p
        } $ z- r- I, Q2 c2 E* }7 x
        finally * @; P4 l: v: u4 m, O  |; V
        {
8 ]4 v# o' _2 C2 ?            try % p5 X( E$ B5 E6 ^+ v
            { ( R! F) e$ \6 Q/ l
                in.close();
) |7 B+ t7 A( N* Z5 i            }
; C; C, N6 j0 g, u/ ^- s6 C. J4 h            catch (IOException e2)
0 H) ^; [0 q: J: K            {
4 ^- D* N# D3 u" b, V1 l, f            }
* Q" r5 g* i7 i/ @        }
$ |/ T  S% [; E2 e, b% F9 }: `        //以下分析输出值,得到物理网卡 . W6 E" [# {1 e+ l+ }
        String rtValue = sb.substring(0); 2 r) v, ^- Q( R# I/ ?+ Q
        int i = rtValue.indexOf("Physical Address. . . . . . . . . :"); ! R( r0 v" l! @+ B
        while(i>0)
/ W$ B- s/ e5 j: o, f8 t  H        {
" ~; S& F# A( |- `3 y            rtValue = rtValue.substring(i + "Physical Address. . . . . . . . . :".length());
0 C. P6 `2 L  c# |4 v            address.add(rtValue.substring(0,18));   T! t, B7 e" o7 |9 s  |- h
            i = rtValue.indexOf("Physical Address. . . . . . . . . :");
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:19:51 | 显示全部楼层

J2SE实现windows下读取网卡的物理地址

} + `0 j& s' d& B
         
) V) P5 U4 H- C: O5 M        return address; : k9 f' _' t5 F7 q1 _7 |
         
" i& @) o7 {4 y) m! D    }
8 g- x% \0 T4 \( R' i    public static void main(String[] args) 1 u5 `" |' `9 D: z
    { 5 ]8 d/ C: ?# H5 F- z( D9 j7 [( X6 S
        List address = ProcessBuilderShow.getPhysicalAddress(); & ?1 C: s1 A3 H/ s% d
        for(String add:address) " X# O; H  q6 R) K3 F& a7 t
        {
; D9 I  e* r: R5 f            System.out.printf("物理网卡地址:%s%n", add); 5 `: ~! I, y$ ~' C0 j) ^+ ^
        }
5 S$ n7 T9 Z4 S( m6 o) P: l    }
" G6 Q+ ]! Y/ n7 t4 d+ Q}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 06:12 , Processed in 0.263997 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表