获取本机IP/MAC

正好要做一个读取本机IP和MAC地址的练习,发现windows下和linux的不一样,于是干脆一起来做工厂模式练习~不过返回都是String - -。

首先是IPReader接口和MACReader接口,表示可以读取IP和MAC的行为:

Code:
  1. package net.reader;   
  2.     
  3. public interface IPReader {   
  4.           
  5.         public String getIP();   
  6.     
  7. }  
Code:
  1. package net.reader;   
  2.     
  3. public interface MACReader {   
  4.           
  5.         public String getMAC();   
  6.     
  7. }  

Windows下的实现类

Code:
  1. package net.reader;   
  2.     
  3. import java.net.InetAddress;   
  4. import java.net.UnknownHostException;   
  5.     
  6.     
  7. public class WindowsIPReader implements IPReader {   
  8.     
  9.         public String getIP() {   
  10.                 String ip;   
  11.                 try {   
  12.                         ip = InetAddress.getLocalHost().getHostAddress();   
  13.                 } catch (UnknownHostException e) {   
  14.                         ip = "Can not read ip!";   
  15.                         e.printStackTrace();   
  16.                 }   
  17.                 return ip;   
  18.         }   
  19.     
  20. }  
Code:
  1. package net.reader;   
  2.     
  3. import java.io.*;   
  4.     
  5.     
  6. public class WindowsMACReader implements MACReader {   
  7.     
  8.         public String getMAC() {   
  9.                 String mac = null;   
  10.                 try {   
  11.                         Process p = Runtime.getRuntime().exec("ipconfig /all");   
  12.                         BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));   
  13.                         String s, str = "";   
  14.                         while((s=br.readLine())!=null){   
  15.                                 if(s.contains("Physical Address")){   
  16.                                         mac = s.substring(44);   
  17.                                         break;   
  18.                                 }   
  19.                         }   
  20.                 } catch (IOException e) {   
  21.                         mac = "Cannot read MAC Address!";   
  22.                         e.printStackTrace();   
  23.                 }   
  24.                 return mac;   
  25.         }   
  26.           
  27. }  

Linux下的实现类

Code:
  1. package net.reader;   
  2.     
  3. import java.io.BufferedReader;   
  4. import java.io.IOException;   
  5. import java.io.InputStreamReader;   
  6.     
  7. public class LinuxIPReader implements IPReader {   
  8.     
  9.         public String getIP() {   
  10.                 String ip = null;   
  11.                 try {   
  12.                         Process p = Runtime.getRuntime().exec("ifconfig");   
  13.                         BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));   
  14.                         String s, str = "";   
  15.                         while((s=br.readLine())!=null){   
  16.                                 if(s.contains("inet addr")){   
  17.                                         ip = s.substring(20,35);   
  18.                                         break;   
  19.                                 }   
  20.                         }   
  21.                 } catch (IOException e) {   
  22.                         ip = "Cannot read IP Address!";   
  23.                         e.printStackTrace();   
  24.                 }   
  25.                 return ip;   
  26.         }   
  27.     
  28. }  
Code:
  1. package net.reader;   
  2.     
  3. import java.io.*;   
  4.     
  5.     
  6. public class LinuxMACReader implements MACReader {   
  7.     
  8.         public String getMAC() {   
  9.                 String mac = null;   
  10.                 try {   
  11.                         Process p = Runtime.getRuntime().exec("ifconfig");   
  12.                         BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));   
  13.                         String s, str = "";   
  14.                         while((s=br.readLine())!=null){   
  15.                                 if(s.contains("HWaddr")){   
  16.                                         mac = s.substring(35);   
  17.                                         break;   
  18.                                 }   
  19.                         }   
  20.                 } catch (IOException e) {   
  21.                         mac = "Cannot read MAC Address!";   
  22.                         e.printStackTrace();   
  23.                 }   
  24.                 return mac;   
  25.         }   
  26.           
  27. }  

然后是抽象工厂

Code:
  1. package net.factory;   
  2.     
  3. public abstract class NetFactory {   
  4.           
  5.         public abstract String getIP();   
  6.           
  7.         public abstract String getMAC();   
  8.     
  9. }  

Windows实现类

Code:
  1. package net.factory;   
  2.     
  3. import net.reader.WindowsIPReader;   
  4. import net.reader.WindowsMACReader;   
  5.     
  6. public class WindowsFactory extends NetFactory {   
  7.     
  8.         @Override   
  9.         public String getIP() {   
  10.                 return new WindowsIPReader().getIP();   
  11.         }   
  12.     
  13.         @Override   
  14.         public String getMAC() {   
  15.                 return new WindowsMACReader().getMAC();   
  16.         }   
  17.     
  18. }  

Linux实现类

Code:
  1. package net.factory;   
  2.     
  3. import net.reader.LinuxIPReader;   
  4. import net.reader.LinuxMACReader;   
  5.     
  6. public class LinuxFactory extends NetFactory {   
  7.     
  8.         @Override  
  9.         public String getIP() {   
  10.                 return new LinuxIPReader().getIP();   
  11.         }   
  12.     
  13.         @Override  
  14.         public String getMAC() {   
  15.                 return new LinuxMACReader().getMAC();   
  16.         }   
  17.     
  18. }  

最后是一个创建工厂的工厂 = =

Code:
  1. package net.factory;   
  2.     
  3.     
  4. public class SystemFactory {   
  5.           
  6.         public static NetFactory getInstance(){   
  7.                 String os = System.getProperty("os.name");   
  8.                 if(os==null){   
  9.                         return null;   
  10.                 }   
  11.                 if(os.startsWith("Windows")){   
  12.                         return new WindowsFactory();   
  13.                 }   
  14.                 if(os.startsWith("Linux")){   
  15.                         return new LinuxFactory();   
  16.                 }   
  17.                 return null;   
  18.         }   
  19.     
  20. }  

输出部分:

Code:
  1. package net;   
  2.     
  3. import net.factory.*;   
  4.     
  5. public class NetProgramTest {   
  6.           
  7.         public static void main(String[] args) {   
  8.                 try{   
  9.                         NetFactory factory = SystemFactory.getInstance();   
  10.                         System.out.println("IP: " + factory.getIP());   
  11.                         System.out.println("MAC Address: " + factory.getMAC());   
  12.                 }catch(Exception e){   
  13.                         System.out.println("Cannot read System Info!");   
  14.                 }   
  15.         }   
  16.     
  17. }  

在winXP和redhat9.0下测试可行~

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值