Files
Parabot-Randoms/src/main/java/org/parabot/randoms/locopk/MacAddressFix.java
T
2017-08-31 23:16:28 +01:00

84 lines
2.2 KiB
Java

package org.parabot.randoms.locopk;
import org.parabot.core.Context;
import org.parabot.core.asm.ASMClassLoader;
import org.parabot.environment.OperatingSystem;
import org.parabot.environment.randoms.Random;
import org.parabot.environment.randoms.RandomType;
import java.lang.reflect.Field;
import java.util.UUID;
/**
* @author EmmaStone
*/
public class MacAddressFix implements Random {
private boolean done;
@Override
public boolean activate() {
return !done;
}
@Override
public void execute() {
try {
final ASMClassLoader classLoader = Context.getInstance().getASMClassLoader();
Class<?> createUID = classLoader.loadClass("com.locopk.client.rs.CreateUID");
if (OperatingSystem.getOS().equals(OperatingSystem.MAC)) {
Field mac = createUID.getDeclaredField("mac");
mac.set(null, randomMacAddress());
} else {
Field firstId = createUID.getDeclaredField("firstId");
firstId.set(null, UUID.randomUUID().toString());
Field secondId = createUID.getDeclaredField("secondId");
secondId.set(null, UUID.randomUUID().toString());
}
} catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
done = true;
}
@Override
public String getName() {
return "Mac Address Fix";
}
@Override
public String getServer() {
return "locopk";
}
@Override
public RandomType getRandomType() {
return RandomType.ON_SERVER_START;
}
private String randomMacAddress() {
java.util.Random rand = new java.util.Random();
byte[] macAddr = new byte[6];
rand.nextBytes(macAddr);
macAddr[0] = (byte) (macAddr[0] & (byte) 254); //zeroing last 2 bytes to make it unicast and locally adminstrated
StringBuilder sb = new StringBuilder(18);
for (byte b : macAddr) {
if (sb.length() > 0) {
sb.append("");
}
sb.append(String.format("%02x", b));
}
return sb.toString().toUpperCase();
}
}