public static void setIpConfig(String adapterName, String ipAddress, String mask, String defaultGateway) throws Exception{
logger.info("ipconfig to set Ip = " + ipAddress);
//netsh interface ip add address "Local Area Connection" gateway=192.168.1.69 gwmetric=0
Process proc = null;
String setIpConfigCmd = "";
if(defaultGateway.contains(Constants.SPLIT_CHARACTER)){
String[]gateways = defaultGateway.split(Constants.SPLIT_CHARACTER);
setIpConfigCmd = "netsh interface ip set address \"" + Constants.IpConfig_NetworkAdapter_Name + "\" source=static " + ipAddress + " " + mask + " " + gateways[0];
for(int i = 1; i < gateways.length; i++){
setIpConfigCmd += "&netsh interface ip add address \"Local Area Connection\" gateway=" + gateways[i] + " gwmetric=0";
}
}else{
setIpConfigCmd = "netsh interface ip set address \"" + Constants.IpConfig_NetworkAdapter_Name + "\" source=static " + ipAddress + " " + mask + " " + defaultGateway;
}
logger.info(setIpConfigCmd);
String endFlag = "set IpAddress command end.";
String[] cmds = {
"cmd",
"/k",
setIpConfigCmd + "&echo " + endFlag };
proc = Runtime.getRuntime().exec(cmds);
OutputStream out = proc.getOutputStream();
InputStream inputStream = proc.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "GBK");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String endFlag2 = "Ipconfig List End";
int count = 0;
String line;
try {
//获取commands命令的输出
while ((line = bufferedReader.readLine()) != null) {
logger.info(line);
if(line.equals(endFlag)){
Thread.sleep(2000);
out.write("ipconfig\r\n".getBytes());
out.write(("echo " + endFlag2 + "\r\n").getBytes());
out.flush();
break;
}
}
while((line = bufferedReader.readLine()) != null) {
logger.info(line);
if(line.contains(ipAddress)){
out.write("exit\r\n".getBytes());
out.flush();
break;
}
if(line.equals(endFlag2)){
if(++count > 10){
throw new Exception("Failed to set IpAddress as " + ipAddress + ", Can't get newIpAddress after ipconfig called times more than " + count);
}
Thread.sleep(1000);
out.write("ipconfig\r\n".getBytes());
out.write(("echo " + endFlag2 + "\r\n").getBytes());
out.flush();
}
}
logger.info("Success to set IpAddress.");
}finally{
bufferedReader.close();
inputStreamReader.close();
if(proc != null)
proc.destroy();
}
}