import java.net.*; import java.io.*; import java.util.*; /** * Find out the local IP address and default gateway * @author Henry Zheng * @url http://www.ireasoning.com */ public class ParseRoute { private String _gateway; private String _ip; private static ParseRoute _instance; public static void main(String[] args) { try { ParseRoute pr = ParseRoute.getInstance(); System.out.println( "Gateway: " + pr.getGateway() ); System.out.println( "IP: " + pr.getLocalIPAddress() ); } catch(Exception e) { System.out.println( e); e.printStackTrace(); } } private ParseRoute () { parse(); } private static boolean isWindows () { String os = System.getProperty ( "os.name" ).toUpperCase (); return os.contains( "WINDOWS" ) ; } private static boolean isLinux () { String os = System.getProperty ( "os.name" ).toUpperCase (); return os.contains( "LINUX" ) ; } public String getLocalIPAddress() { return _ip; } public String getGateway() { return _gateway; } public static ParseRoute getInstance() { if(_instance == null) { _instance = new ParseRoute(); } return _instance; } private void parse() { if(isWindows()) { parseWindows(); } else if(isLinux()) { parseLinux(); } } private void parseWindows() { try { Process pro = Runtime.getRuntime().exec("cmd.exe /c route print"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream())); String line; while((line = bufferedReader.readLine())!=null) { line = line.trim(); String [] tokens = Tokenizer.parse(line, ' ', true , true);// line.split(" "); if(tokens.length == 5 && tokens[0].equals("0.0.0.0")) { _gateway = tokens[2]; _ip = tokens[3]; return; } } //pro.waitFor(); } catch(IOException e) { System.err.println(e); e.printStackTrace(); } } private void parseLinux() { try { BufferedReader reader = new BufferedReader(new FileReader("/proc/net/route")); String line; while((line = reader.readLine())!=null) { line = line.trim(); String [] tokens = Tokenizer.parse(line, '\t', true , true);// line.split(" "); if(tokens.length > 1 && tokens[1].equals("00000000")) { String gateway = tokens[2]; //0102A8C0 if(gateway.length() == 8) { String[] s4 = new String[4]; s4[3] = String.valueOf(Integer.parseInt(gateway.substring(0, 2), 16)); s4[2] = String.valueOf(Integer.parseInt(gateway.substring(2, 4), 16)); s4[1] = String.valueOf(Integer.parseInt(gateway.substring(4, 6), 16)); s4[0] = String.valueOf(Integer.parseInt(gateway.substring(6, 8), 16)); _gateway = s4[0] + "." + s4[1] + "." + s4[2] + "." + s4[3]; } String iface = tokens[0]; NetworkInterface nif = NetworkInterface.getByName(iface); Enumeration addrs = nif.getInetAddresses(); while(addrs.hasMoreElements()) { Object obj = addrs.nextElement(); if(obj instanceof Inet4Address) { _ip = obj.toString(); if(_ip.startsWith("/")) _ip = _ip.substring(1); return; } } return; } } reader.close(); } catch(IOException e) { System.err.println(e); e.printStackTrace(); } } }