多线程端口扫描器,扫描多个IP。如何确保一次扫描一个ip

时间:2013-07-25 09:35:51

标签: java multithreading memory port

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

谢谢

0 个答案:

没有答案