0

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

谢谢

4

0 回答 0