Skip to content

Commit 25a4715

Browse files
committed
update
1 parent cf40fd2 commit 25a4715

File tree

6 files changed

+109
-107
lines changed

6 files changed

+109
-107
lines changed

src/GUI/GUIMain.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import dao.TargetDao;
3030
import dao.TitleDao;
3131
import domain.DomainPanel;
32-
import domain.DomainProducer;
3332
import domain.ProjectMenu;
33+
import thread.DomainProducer;
3434
import title.TitlePanel;
3535

3636

src/burp/BurpExtender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void extensionUnloaded() {
138138

139139
try {// 避免这里错误导致保存逻辑的失效
140140
if (gui.getTitlePanel().getThreadGetTitle() != null) {
141-
gui.getTitlePanel().getThreadGetTitle().interrupt();// maybe null
141+
gui.getTitlePanel().getThreadGetTitle().stopAll();// maybe null
142142
gui.getInputQueue().clear();
143143
gui.getLiveinputQueue().clear();
144144
gui.getHttpsChecked().clear();
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
package domain;
1+
package thread;
22

33
import GUI.GUIMain;
44
import base.Commons;
55
import burp.*;
6+
import domain.CertInfo;
7+
import domain.DomainManager;
8+
import domain.DomainPanel;
9+
610
import com.bit4woo.utilbox.burp.HelperPlus;
711
import com.bit4woo.utilbox.utils.DomainUtils;
812
import com.bit4woo.utilbox.utils.EmailUtils;
@@ -180,6 +184,7 @@ public void run() {
180184
* e1.printStackTrace(BurpExtender.getStderr()); e1.getMessage(); } } } }
181185
*/
182186
} catch (InterruptedException error) {
187+
Thread.currentThread().interrupt();
183188
BurpExtender.getStdout().println(this.getName() + " exits due to Interrupt signal received");
184189
} catch (Exception error) {
185190
error.printStackTrace(BurpExtender.getStderr());

src/thread/ThreadGetSubnet.java

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.PrintWriter;
44
import java.util.ArrayList;
5+
import java.util.Collections;
56
import java.util.HashSet;
67
import java.util.List;
78
import java.util.Set;
@@ -12,65 +13,64 @@
1213
import burp.IBurpExtenderCallbacks;
1314
import burp.IExtensionHelpers;
1415

15-
1616
//no need to pass BurpExtender object to these class, IBurpExtenderCallbacks object is enough
17-
public class ThreadGetSubnet extends Thread{
17+
public class ThreadGetSubnet extends Thread {
1818
private Set<String> domains;
19-
private List<IPProducer> plist;
20-
19+
private final List<IPProducer> plist = Collections.synchronizedList(new ArrayList<>());
2120

22-
private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks();//静态变量,burp插件的逻辑中,是可以保证它被初始化的。;
21+
private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks();// 静态变量,burp插件的逻辑中,是可以保证它被初始化的。;
2322
public PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
2423
public PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);
2524
public IExtensionHelpers helpers = callbacks.getHelpers();
2625

2726
public ThreadGetSubnet(Set<String> domains) {
2827
this.domains = domains;
2928
}
29+
3030
public Set<String> IPset = new HashSet<>();
3131

3232
@Override
33-
public void run(){
33+
public void run() {
3434
stdout.println("~~~~~~~~~~~~~Start Get IPs~~~~~~~~~~~~~");
3535
BlockingQueue<String> domainQueue = new LinkedBlockingQueue<String>();
3636
BlockingQueue<String> IPQueue = new LinkedBlockingQueue<String>();
3737

3838
domainQueue.addAll(domains);
3939

40-
plist = new ArrayList<IPProducer>();
41-
42-
for (int i=0;i<=20;i++) {
43-
IPProducer p = new IPProducer(domainQueue,IPQueue,i);
44-
p.setDaemon(true);
40+
for (int i = 0; i <= 20; i++) {
41+
IPProducer p = new IPProducer(domainQueue, IPQueue, i);
4542
p.start();
4643
plist.add(p);
4744
}
48-
49-
try {
50-
for (IPProducer p:plist) {
51-
p.join();
45+
46+
for (IPProducer p : plist) {
47+
try {
48+
p.join(1000);
49+
} catch (InterruptedException e) {
50+
Thread.currentThread().interrupt();
51+
break;
5252
}
53-
//让主线程等待各个子线程执行完成,才会结束。
54-
//https://www.cnblogs.com/zheaven/p/12054044.html
55-
} catch (InterruptedException e) {
56-
stdout.println("force stop received");
57-
e.printStackTrace();
5853
}
59-
54+
6055
stdout.println("~~~~~~~~~~~~~Get IP Done~~~~~~~~~~~~~");
6156
IPset.addAll(IPQueue);
6257
}
6358

64-
@Deprecated
65-
public void stopThreads() {
66-
for (IPProducer p:plist) {
67-
p.stopThread();
59+
public void stopAll() {
60+
if (plist == null)
61+
return;
62+
63+
for (IPProducer p : plist) {
64+
p.interrupt();// 必须配合Thread.currentThread().isInterrupted()逻辑,否则不起作用
6865
}
69-
stdout.println("threads stopped!");
70-
}
71-
72-
public void forceStopThreads() {
73-
this.interrupt();//将子线程都设置为守护线程,会随着主线程的结束而立即结束
74-
stdout.println("~~~~~~~~~~~~~force stop main thread,all sub-threads will exit!~~~~~~~~~~~~~");
66+
67+
for (IPProducer p : plist) {
68+
try {
69+
p.join(1000);
70+
} catch (InterruptedException e) {
71+
Thread.currentThread().interrupt();
72+
}
73+
}
74+
stdout.println("~~~~~~~~~~~~~all sub-threads exit!~~~~~~~~~~~~~");
7575
}
7676
}

src/thread/ThreadGetTitle.java

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,64 +14,64 @@
1414
import burp.IBurpExtenderCallbacks;
1515
import burp.IExtensionHelpers;
1616

17-
public class ThreadGetTitle extends Thread{
18-
private HashMap<String,String> domains;
17+
public class ThreadGetTitle extends Thread {
18+
private HashMap<String, String> domains;
1919
private final List<Producer> plist = Collections.synchronizedList(new ArrayList<>());
2020

21-
22-
private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks();//静态变量,burp插件的逻辑中,是可以保证它被初始化的。;
21+
private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks();// 静态变量,burp插件的逻辑中,是可以保证它被初始化的。;
2322
public PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);
2423
public PrintWriter stderr = new PrintWriter(callbacks.getStderr(), true);
2524
public IExtensionHelpers helpers = callbacks.getHelpers();
2625
private int threadNumber;
2726
private GUIMain guiMain;
2827

29-
public ThreadGetTitle(GUIMain guiMain,HashMap<String,String> domains,int threadNumber) {
28+
public ThreadGetTitle(GUIMain guiMain, HashMap<String, String> domains, int threadNumber) {
3029
this.guiMain = guiMain;
3130
this.domains = domains;
3231
this.threadNumber = threadNumber;
3332
}
3433

3534
@Override
36-
public void run(){
37-
stdout.println(String.format("~~~~~~~~~~~~~use %s threads~~~~~~~~~~~~~",threadNumber));
38-
stdout.println("~~~~~~~~~~~~~Start threading Get Title~~~~~~~~~~~~~ total task number: "+domains.size());
39-
BlockingQueue<Map.Entry<String,String>> domainQueue = new LinkedBlockingQueue<>();//use to store domains
35+
public void run() {
36+
stdout.println(String.format("~~~~~~~~~~~~~use %s threads~~~~~~~~~~~~~", threadNumber));
37+
stdout.println("~~~~~~~~~~~~~Start threading Get Title~~~~~~~~~~~~~ total task number: " + domains.size());
38+
BlockingQueue<Map.Entry<String, String>> domainQueue = new LinkedBlockingQueue<>();// use to store domains
4039
domainQueue.addAll(domains.entrySet());
4140

42-
for (int i=0;i<threadNumber;i++) {
43-
Producer p = new Producer(guiMain,domainQueue,i);
44-
//p.setDaemon(true);//将子线程设置为守护线程,会随着主线程的结束而立即结束。"主线程的结束"指的是”只有当JVM也退出时才可以!”
41+
for (int i = 0; i < threadNumber; i++) {
42+
Producer p = new Producer(guiMain, domainQueue, i);
43+
// p.setDaemon(true);//将子线程设置为守护线程,会随着主线程的结束而立即结束。"主线程的结束"指的是”只有当JVM也退出时才可以!”
4544
plist.add(p);
46-
p.start();
45+
p.start();
46+
}
47+
48+
for (Producer p : plist) {
49+
try {
50+
p.join(1000);
51+
} catch (InterruptedException e) {
52+
Thread.currentThread().interrupt();
53+
break;
54+
}
4755
}
48-
49-
for (Producer p : plist) {
50-
try {
51-
p.join(1000);
52-
} catch (InterruptedException e) {
53-
Thread.currentThread().interrupt();
54-
break;
55-
}
56-
}
57-
58-
stdout.println(getName()+" finished");
56+
57+
stdout.println(getName() + " finished");
5958
}
60-
59+
6160
public void stopAll() {
62-
if (plist == null) return;
61+
if (plist == null)
62+
return;
6363

64-
for (Producer p : plist) {
65-
p.interrupt();//必须配合Thread.currentThread().isInterrupted()逻辑,否则不起作用
66-
}
64+
for (Producer p : plist) {
65+
p.interrupt();// 必须配合Thread.currentThread().isInterrupted()逻辑,否则不起作用
66+
}
6767

68-
for (Producer p : plist) {
69-
try {
70-
p.join(1000);
71-
} catch (InterruptedException e) {
72-
Thread.currentThread().interrupt();
73-
}
74-
}
75-
stdout.println("~~~~~~~~~~~~~all sub-threads exit!~~~~~~~~~~~~~");
68+
for (Producer p : plist) {
69+
try {
70+
p.join(1000);
71+
} catch (InterruptedException e) {
72+
Thread.currentThread().interrupt();
73+
}
74+
}
75+
stdout.println("~~~~~~~~~~~~~all sub-threads exit!~~~~~~~~~~~~~");
7676
}
7777
}

src/thread/ThreadSearhDomain.java

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,78 +4,75 @@
44
import burp.IBurpExtenderCallbacks;
55
import burp.IExtensionHelpers;
66
import burp.IHttpRequestResponse;
7-
import domain.DomainProducer;
87

98
import java.io.PrintWriter;
109
import java.util.ArrayList;
10+
import java.util.Collections;
1111
import java.util.List;
1212

1313
import GUI.GUIMain;
1414

1515
//////////////////ThreadGetTitle block/////////////
1616
//no need to pass BurpExtender object to these class, IBurpExtenderCallbacks object is enough
17-
public class ThreadSearhDomain extends Thread{
17+
public class ThreadSearhDomain extends Thread {
1818
private List<IHttpRequestResponse> messages;
19-
private List<DomainProducer> plist;
19+
private final List<DomainProducer> plist = Collections.synchronizedList(new ArrayList<>());
2020

21-
private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks();//静态变量,burp插件的逻辑中,是可以保证它被初始化的。;
21+
private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks();// 静态变量,burp插件的逻辑中,是可以保证它被初始化的。;
2222
public PrintWriter stdout;
2323
public PrintWriter stderr;
2424
public IExtensionHelpers helpers = callbacks.getHelpers();
2525
GUIMain guiMain;
2626
private boolean searchThirdPart;
2727

28-
public ThreadSearhDomain(GUIMain guiMain,List<IHttpRequestResponse> messages,boolean searchThirdPart) {
28+
public ThreadSearhDomain(GUIMain guiMain, List<IHttpRequestResponse> messages, boolean searchThirdPart) {
2929
this.guiMain = guiMain;
3030
this.messages = messages;
3131
stdout = BurpExtender.getStdout();
3232
stderr = BurpExtender.getStderr();
3333
this.setName(this.toString());
3434
this.searchThirdPart = searchThirdPart;
3535
}
36-
36+
3737
@Override
38-
public void run(){
38+
public void run() {
3939
stdout.println("~~~~~~~~~~~~~Start Search Domain~~~~~~~~~~~~~");
4040

4141
guiMain.getInputQueue().addAll(messages);
4242

43-
plist = new ArrayList<DomainProducer>();
44-
45-
for (int i=0;i<=20;i++) {
46-
DomainProducer p = new DomainProducer(guiMain,guiMain.getInputQueue(),i,searchThirdPart);
47-
p.setDaemon(true);
48-
p.start();
43+
for (int i = 0; i <= 20; i++) {
44+
DomainProducer p = new DomainProducer(guiMain, guiMain.getInputQueue(), i, searchThirdPart);
4945
plist.add(p);
46+
p.start();
5047
}
51-
52-
try {
53-
for (DomainProducer p:plist) {
54-
p.join();
48+
49+
for (DomainProducer p : plist) {
50+
try {
51+
p.join(1000);
52+
} catch (InterruptedException e) {
53+
Thread.currentThread().interrupt();
54+
break;
5555
}
56-
//让主线程等待各个子线程执行完成,才会结束。
57-
//https://www.cnblogs.com/zheaven/p/12054044.html
58-
} catch (InterruptedException e) {
59-
stdout.println("force stop received");
60-
e.printStackTrace();
6156
}
57+
6258
stdout.println("~~~~~~~~~~~~~Search Domain Done~~~~~~~~~~~~~");
6359
}
6460

65-
@Deprecated
66-
public void stopThreads() {
67-
for (DomainProducer p:plist) {
68-
p.stopThread();
61+
public void stopAll() {
62+
if (plist == null)
63+
return;
64+
65+
for (DomainProducer p : plist) {
66+
p.interrupt();// 必须配合Thread.currentThread().isInterrupted()逻辑,否则不起作用
6967
}
70-
stdout.println("threads stopped!");
71-
}
72-
73-
public void forceStopThreads() {
74-
this.interrupt();//将子线程都设置为守护线程,会随着主线程的结束而立即结束,与setDaemon(true)结合
75-
stdout.println("~~~~~~~~~~~~~force stop main thread,all sub-threads will exit!~~~~~~~~~~~~~");
76-
}
7768

78-
// public static void main(String args[]) {//test
79-
// System.out.println(DomainProducer.grepDomain("http://www.jd.com/usr/www.baidu.com/xss.jd.com"));
80-
// }
69+
for (DomainProducer p : plist) {
70+
try {
71+
p.join(1000);
72+
} catch (InterruptedException e) {
73+
Thread.currentThread().interrupt();
74+
}
75+
}
76+
stdout.println("~~~~~~~~~~~~~all sub-threads exit!~~~~~~~~~~~~~");
77+
}
8178
}

0 commit comments

Comments
 (0)