Skip to content

Commit

Permalink
domain hunter v0.6
Browse files Browse the repository at this point in the history
use thread( callable interface ) to speed up get related-domains.
  • Loading branch information
bit4woo committed Aug 3, 2018
1 parent 05a4029 commit 40b5c24
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 26 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ A Burp Suite extender that search *<u>**sub domains,similar domains and related

2017-07-28: Add a function to crawl all known subdomains; fix some bug.

2018-07-06:Add the ability to get related domains by get SANs object of certification.
2018-07-06:Add the ability to get related domains by get SANs object of certification.

2018-08-03: use thread to speed up get related-domains.

**xmind of domain collection**

Expand Down
40 changes: 36 additions & 4 deletions src/burp/BurpExtender.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
Expand All @@ -24,7 +27,6 @@
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
Expand All @@ -34,10 +36,8 @@
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.URI;
import java.net.URL;
import java.net.UnknownHostException;


public class BurpExtender implements IBurpExtender, IHttpListener, ITab, IContextMenuFactory
Expand Down Expand Up @@ -127,6 +127,37 @@ else if (Host.contains(domainlike) && !Host.equalsIgnoreCase(subdomainof)){
}
}

stdout.println("sub-domains and similar-domains search finished\n");

//多线程获取
//Set<Future<Set<String>>> set = new HashSet<Future<Set<String>>>();
Map<String,Future<Set<String>>> urlResultmap = new HashMap<String,Future<Set<String>>>();
ExecutorService pool = Executors.newFixedThreadPool(10);

for (String url:httpsURLs) {
Callable<Set<String>> callable = new ThreadCertInfo(url);
Future<Set<String>> future = pool.submit(callable);
//set.add(future);
urlResultmap.put(url, future);
}

Set<String> tmpRelatedDomainSet = new HashSet<String>();
for(String url:urlResultmap.keySet()) {
Future<Set<String>> future = urlResultmap.get(url);
//for (Future<Set<String>> future : set) {
try {
stdout.println("founded related-domains :"+future.get() +" from "+url);
if (future.get()!=null) {
tmpRelatedDomainSet.addAll(future.get());
}

} catch (Exception e) {
//e.printStackTrace(stderr);
stderr.println(e.getMessage());
}
}

/* 单线程获取方式
Set<String> tmpRelatedDomainSet = new HashSet<String>();
//begin get related domains
for(String url:httpsURLs) {
Expand All @@ -145,6 +176,7 @@ else if (Host.contains(domainlike) && !Host.equalsIgnoreCase(subdomainof)){
continue;
}
}
*/

//对 SANs的结果再做一次分类。
for (String item:tmpRelatedDomainSet) {
Expand Down
75 changes: 54 additions & 21 deletions src/burp/ThreadCertInfo.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
package burp;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import test.CallableExample.WordLengthCallable;

public class ThreadCertInfo implements Callable<Set<String>>{

private Set<String> Domains;
/*
private Set<String> urls;
public ThreadCertInfo(Set<String> urls) {
this.urls = urls;
}
@Override
public Set<String> call() throws Exception{
public Set<String> call(){
Set<String> tmpDomains = new HashSet<String>();
for (int i=0;i<=urls.size()/10+1;i++) {//一般根据 【资源数量%线程数量+1】 来确定,保证资源得到处理
Expand All @@ -38,13 +38,22 @@ public Set<String> call() throws Exception{
}
return null;
}

*/

private String url;
public ThreadCertInfo(String url) {
this.url = url;
}


@Override
public Set<String> call() throws Exception{
Set<String> tmpDomains = CertInfo.getSANs(url);
return tmpDomains;
}

public static void main(String[] args) {

ExecutorService pool = Executors.newFixedThreadPool(3);
Set<Future<Integer>> set = new HashSet<Future<Integer>>();


Set<String> urls = new HashSet<String>();
urls.add("https://202.77.129.30");
urls.add("https://ebppweb.alipay.com");
Expand All @@ -62,30 +71,54 @@ public static void main(String[] args) {
urls.add("https://shenghuo.alipay.com");
urls.add("https://home.alipay.com");

Set<Future<Set<String>>> set = new HashSet<Future<Set<String>>>();
Map<String,Future<Set<String>>> urlResultmap = new HashMap<String,Future<Set<String>>>();
ExecutorService pool = Executors.newFixedThreadPool(3);

for (String word: urls) {
Callable<Integer> callable = new WordLengthCallable(word);

Callable<Set<String>> callable = new ThreadCertInfo(word);
Future<Set<String>> future = pool.submit(callable);
set.add(future);
urlResultmap.put(word, future);
}

int sum = 0;

for (Future<Integer> future : set) {

Set<String> Domains = new HashSet<String>();
for(String url:urlResultmap.keySet()) {
Future<Set<String>> future = urlResultmap.get(url);
//for (Future<Set<String>> future : set) {
try {
sum += future.get();
System.out.println(url);
System.out.println(future.get());
if (future.get()!=null) {
Domains.addAll(future.get());
}

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.getMessage());
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.getMessage());
}catch(Exception e) {
System.out.println(e.getMessage());
}
}

System.out.printf("The sum of lengths is %s%n", sum);
System.exit(sum);

System.out.println(set2string(Domains));
}



public static String set2string(Set set){
Iterator iter = set.iterator();
String result = "";
while(iter.hasNext())
{
//System.out.println(iter.next());
result +=iter.next();
result +="\n";
}
return result;
}
}
1 change: 1 addition & 0 deletions src/test/CallableExample.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public static void main(String args[]) throws Exception {
int sum = 0;

for (Future<Integer> future : set) {
System.out.print(future.get());
sum += future.get();
}

Expand Down

0 comments on commit 40b5c24

Please sign in to comment.