Java 调用外部s扫描并获取扫描结果
这个实在太简单了,不过还是记录下来吧。java.lang.Runtime.getRuntime().exec("xxxxx");执行完之后其实返回的是一个流对象,那么也就是说调用一个外部的exe之类执行过程中的结果也可以在流中看到。调用后记得关闭后台的exe进程哦,偷懒就不写了。
简单实现代码:
package net.ltan.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class STest { public static List<String> test(String type,String ip,int port,int th){ String cmd = "c:/s.exe "+type+" "+ip+" "+port+" "+th; Pattern reg =Pattern.compile("(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})"); List<String> ls = new ArrayList<String>(); try { Process p = java.lang.Runtime.getRuntime().exec("cmd /c "+cmd); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8")); String temp; while ((temp = in.readLine()) != null) { Matcher matcher = reg.matcher(temp); if(matcher.find()){ ls.add(matcher.group()); System.out.println(temp); } } } catch (IOException e) { e.printStackTrace(); } return ls; } public static void main(String[] args) { List<String> ls = test("TCP","210.73.128.10 210.73.164.10",8080,512); System.out.println("---------------------------------------------"); for(String s:ls){ System.out.println(s); } } }