我正在构建一个可以扫描ip范围的端口扫描程序。我已经到了所有参数都正确并且我的多线程端口扫描器适用于单个IP的问题,我现在的问题是,当我尝试扫描一系列ip时,它启动x个多线程扫描器(x为ip的数量都在同一时间,当然这会导致内存问题。我想知道如何让线程池顺序运行。按顺序一次扫描一个ip。
这是我用来定义IP地址列表并将它们放入我的多线程扫描程序的代码。
else if (chkIPRange.isSelected()==true){
System.out.println("multi ip scan started");
if(multiScanner==null && errorCheck()==0 || isScanning==false){
isScanning=true;
lstMessagesModel.clear();
listListeningModel.clear();
btnScan.setText("Stop");
lstMessagesModel.addElement("Scan Started...");
int p1 = Integer.parseInt(txtStartPort.getText());
int p2 = Integer.parseInt(txtFinalPort.getText());
try {
InetAddress ip1 = InetAddress.getByName(txtTargetIP.getText());
InetAddress ip2 = InetAddress.getByName(txtFiniship.getText());
List<InetAddress> ipList = new ArrayList<InetAddress>();
int ip1Int = ByteBuffer.wrap(ip1.getAddress()).getInt();
int ip2Int = ByteBuffer.wrap(ip2.getAddress()).getInt();
for (int i = ip1Int; i <= ip2Int; i++) {
InetAddress ipName = InetAddress.getByName(String.valueOf(i));
ipList.add(ipName);
System.out.println(ipName);
}
for (InetAddress ipSingle : ipList) {
multiScanner = new MultiThread(ipSingle, p1, p2, this);
multiScanner.start();
System.out.println("New Thread Started");
}
} catch (UnknownHostException e) {
lstMessagesModel.addElement("Unable to Connect");
}
}
}
我可以看到我正在为每个IP地址创建一个新的多线程扫描程序实例,这很可能是我的问题的根源,但我不确定如何在不创建新的情况下向扫描程序发送新的IP地址新实例?
谢谢