package biz.bokhorst.xprivacy; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; public class XInetAddress extends XHook { @SuppressWarnings("unused") private Methods mMethod; private XInetAddress(Methods method, String restrictionName, String specifier) { super(restrictionName, method.name(), "InetAddress." + method.name()); mMethod = method; } public String getClassName() { return "java.net.InetAddress"; } // public static InetAddress[] getAllByName(String host) // public static InetAddress[] getAllByNameOnNet(String host, int netId) // public static InetAddress getByAddress(byte[] ipAddress) // public static InetAddress getByAddress(String hostName, byte[] ipAddress) // public static InetAddress getByName(String host) // public static InetAddress getByNameOnNet(String host, int netId) // libcore/luni/src/main/java/java/net/InetAddress.java // http://developer.android.com/reference/java/net/InetAddress.html // http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/android/net/Network.java private enum Methods { getAllByName, getAllByNameOnNet, getByAddress, getByName, getByNameOnNet }; public static List<XHook> getInstances() { List<XHook> listHook = new ArrayList<XHook>(); for (Methods addr : Methods.values()) listHook.add(new XInetAddress(addr, PrivacyManager.cInternet, null)); return listHook; } @Override protected void before(XParam param) throws Throwable { // Do nothing } @Override protected void after(XParam param) throws Throwable { Object result = param.getResult(); if (result != null) { // Get addresses InetAddress[] addresses; if (result instanceof InetAddress) addresses = new InetAddress[] { (InetAddress) result }; else if (result instanceof InetAddress[]) addresses = (InetAddress[]) result; else addresses = new InetAddress[0]; // Check if restricted boolean restrict = false; for (InetAddress address : addresses) if (!address.isLoopbackAddress()) { restrict = true; break; } // Restrict if (restrict) if (param.args.length > 0 && param.args[0] instanceof String) { if (isRestrictedExtra(param, (String) param.args[0])) param.setThrowable(new UnknownHostException("XPrivacy")); } else { if (isRestricted(param)) param.setThrowable(new UnknownHostException("XPrivacy")); } } } }