代码如下:
/**
* Created by ingra on 2017-05-24.
*/
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
public class FuckNetKeeper {
private class ProcessObj {
String processName;
char callType;
public ProcessObj(String processName, char callType) {
this.processName = processName;
this.callType = callType;
}
public String getProcessName() {
return processName;
}
public char getCallType() {
return callType;
}
}
private static List<ProcessObj> processObjList=new ArrayList<ProcessObj>();
//列出系统进程
private String ProcessDetails() throws IOException {
ProcessBuilder pb = new ProcessBuilder("tasklist");
Process p = pb.start();
BufferedReader out = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getInputStream()), Charset.forName("GB2312")));
BufferedReader err = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getErrorStream())));
System.out.println("正在列出Windows系统进程列表:");
String processDetails;//进程信息总表
StringBuilder sb = new StringBuilder();
String ostr;
while ((ostr = out.readLine()) != null) {
sb.append(ostr + "\n");
}
processDetails = sb.toString();
String estr = err.readLine();
if (estr != null) {
System.out.println("\nError Info");
System.out.println(estr);
}
return processDetails;
}
//解析系统进程
private void processToObj(String processDetails) {
System.out.println("正在进行进程分析");
String processDetail;
char[] ch = processDetails.toCharArray();
//字符串截取开始
//开头包含141个制表输出字符 一行77个字符包含换行 进程名固定长度25 空出10长度的空格和pid 进程类型C/S
char[] process_name_chararray = new char[25];
char type='0';
for (int i = 142; i < ch.length; ) {
int a = 0;
int b=0;
for (; a < 25; a++) {
if (a+i<ch.length)
process_name_chararray[a] = ch[a + i];
}
if (a == 25) {
//增加了进程占用内存数量为“暂缺”时,本行多跳过两个字符的逻辑问题
if (isChinese(ch[a+i+48-1])){
type=ch[i+35];
i = i + 75;
}
else {
type = ch[i + 35];
i = i + 77;
}
}
String str1 = new String(process_name_chararray);
System.out.print(str1+" ");
System.out.println(type);
processObjList.add(new ProcessObj(str1,type));
}
}
//遍历找到nk进程并且杀死
public void searchAndFuckNK(List<ProcessObj>processObjs) throws IOException {
System.out.println("正在找到并杀死NK进程");
int count=0;
for (ProcessObj processObj:processObjs){
String name=processObj.getProcessName();
char type=processObj.getCallType();
char[] namechar=name.toCharArray();
//-分别在8、13、18、23位
if (type=='C'&&namechar[8]==namechar[13]&&namechar[13]==namechar[18]&&namechar[18]==namechar[23]
&&namechar[23]=='-'){
System.out.println("已找到流氓进程");
System.out.println(name+" "+type);
System.out.println("正在驱逐流氓");
Runtime.getRuntime().exec("cmd.exe /c taskkill /F " +
"/FI \"IMAGENAME eq "+processObj.getProcessName()+"*\"");
count++;
}
if (count==2)
break;
}
if (count==2){
System.out.println("已经成功杀死NK进程,可以开启WIFI");
System.out.println("Powered By 悬雨");
}
if (count==0) {
System.out.println("未检测到NK进程,请确认是否成功启动NK或是已经杀死");
System.out.println("Powered By 悬雨");
}
if (count==1){
System.out.println("只检测到了一个NK进程,请确认是否成功启动NK");
System.out.println("Powered By 悬雨");
}
}
// 根据Unicode编码完美的判断中文汉字和符号
private static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
return true;
}
return false;
}
public static void main(String[] args) throws Exception {
FuckNetKeeper fnk = new FuckNetKeeper();
System.out.println(fnk.ProcessDetails());
fnk.processToObj(fnk.ProcessDetails());
fnk.searchAndFuckNK(processObjList);
}
}
可配合bat批处理脚本和编译后的jar包使用。
网友评论