nmap使用
1、查看指定服务器指定端口上的所有服务
nmap -sV 10.1.1.1-p 2000-20000
2、使用java调用nmap
/***
* 多线程执行 含含检测ip是否可以访问 含限制每秒的发包次数
* D:\\nmap-7.91\\nmap.exe -sV 10.28.151.93 -p 8000-8080 --max-rate 100
*/
import java.io.*;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main22 {
/**
* 方法 1:使用 FileWriter 写文件
*
* @param file 文件目录
* @param conent 待写入内容
* @throws IOException
*/
public static void fileWriterMethod(String file, String conent) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, true)));
out.write(conent + "\r\n");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/***
* 调用namp
* @param ip
* @param port
*/
public static void
coreExe(String ip, String port) {
try {
Runtime rt = Runtime.getRuntime();
//Process pr = rt.exec("cmd /c dir"); // cmd /c calc
// Process pr = rt.exec("D:\\xunlei\\project.aspx");
//Process pr = rt.exec("D:\\nmap-7.91\\nmap.exe -sV " + ip + " -p " + port);
Process pr = rt.exec("C:\\Program Files (x86)\\Nmap\\nmap.exe -sV " + ip + " -p " + port+" --max-rate 100");
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream(), "GBK"));
String line = null;
synchronized (Main22.class) {
String log_info = "*********************************************" + ip + "*************************************************";
fileWriterMethod("nmap_output_alive_8088.txt", log_info);
while ((line = input.readLine()) != null) {
System.out.println(line);
fileWriterMethod("nmap_output_alive_8088.txt", line);
}
int exitVal = pr.waitFor();
System.out.println("Exited with error code " + exitVal);
}
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}
}
/**
* 检测ip是否可以ping
*
* @param ipAddress
* @return
* @throws Exception
*/
public static boolean ping(String ipAddress) throws Exception {
int timeOut = 1000; //超时应该在3钞以上
boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut);
System.out.println("ip :" + ipAddress + " ping: " + status);
// 当返回值是true时,说明host是可用的,false则不可。
return status;
}
/**
* 1.创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小<br>
* 2.线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程<br>
* 3.因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字,和线程名称<br>
* //"线程名称:" + Thread.currentThread().getName()
*
* @param ipLists
*/
public static void fixTheadPoolTest(List ipLists) throws Exception {
Main22 main = new Main22();
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
int ipLists_len = ipLists.size();
for (int i = 0; i < ipLists_len; i++) {
final int ii = i;
final String ip = (String) ipLists.get(0);
ipLists.remove(0);
//System.out.println(ipLists);
fixedThreadPool.execute(() -> {
try {
// if (Main22.ping(ip)) {//检测ip是否可以访问
// fileWriterMethod("nmap_output_8080_alive_6.txt", ip);
// System.out.println("线程名称:" + Thread.currentThread().getName() + ",执行" + ii + ",nmap 地址:" + ip);
// //main.coreExe(ip, "1-21000");
// main.coreExe(ip, "8080");
// }
System.out.println("线程名称:" + Thread.currentThread().getName() + ",执行" + ii + ",nmap 地址:" + ip);
main.coreExe(ip, "8088");
} catch (Exception e) {
e.printStackTrace();
}
});
}
fixedThreadPool.shutdown();
}
public static void main(String[] args) throws Exception {
//BufferedReader是可以按行读取文件
FileInputStream inputStream = new FileInputStream("D:\\intellijProjects\\untitled\\src\\main\\java\\alive0.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String str = null;
List ipLists = new ArrayList();
while ((str = bufferedReader.readLine()) != null) {
ipLists.add(str);
}
//close
inputStream.close();
bufferedReader.close();
//main.coreExe("10.28.151.93", "8000-8080");
System.out.println("*****begin*****");
Main22.fixTheadPoolTest(ipLists);
System.out.println("*****end*****");
}
}
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨小小打赏一下吧,如果囊中羞涩,不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

浙公网安备 33010602011771号