我正在构建一个可以扫描 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 地址?
谢谢