zoukankan      html  css  js  c++  java
  • 多线程实现端口扫描

      1 import java.net.*;
      2 import java.io.*;
      3 import java.awt.*;
      4 import java.awt.event.*;
      5 import javax.swing.*;
      6 
      7 public class TcpThread extends Thread{
      8     
      9     //定义变量
     10     public static InetAddress hostAddress;//主机IP地址
     11     public static int MIN_port;            //The minimal number of port
     12     public static int MAX_port;            //The maximal number of port
     13     private int NUM_thread;                //线程总数
     14     public static int type;                //查询方式,0为IP方式1为主机名查询方式
     15     
     16     public static int ip1;//IP前三位
     17     public static int ip2;//IP4~6位
     18     public static int ip3;//IP7~9位
     19     public static int ipstart;//起始IP地址最后四位
     20     public static int ipend;//结束IP地址最后四位
     21     public static String ipAll;//完整的IP地址
     22     
     23     String nameHost = "";//扫描的主机名称或IP地址
     24     String typeport = "0";//端口类别
     25     
     26     /**
     27      * 构造函数
     28      */
     29     public TcpThread( String name, int numthread ){
     30         super(name);
     31         this.NUM_thread = numthread;
     32     }
     33     
     34     /**
     35      * run()运行函数
     36      */
     37     public void run( ) {
     38         
     39         int h = 0;//IP address
     40         int i = 0;//port number
     41         
     42         Socket theTcpSocket;
     43         
     44         //根据IP地址进行扫描
     45         if( 0 == type ){
     46             //IP地址循环扫描
     47             for( h = ipstart; h <= ipend; h++){
     48                 ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;
     49                 nameHost = ipAll;
     50                 
     51                 try{
     52                     hostAddress = InetAddress.getByName( ipAll );
     53                 }catch( UnknownHostException e){}
     54                 
     55                 //不同端口循环扫描
     56                 for( i = MIN_port; i < MAX_port + Integer.parseInt( ThreadScan.maxThread.getText() );
     57                         i += Integer.parseInt(ThreadScan.maxThread.getText() ) ){
     58                     try{
     59                         theTcpSocket = new Socket(hostAddress, i);
     60                         theTcpSocket.close();
     61                         
     62                         ThreadScan.Result.append( nameHost +":"+i);
     63                         
     64                         switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以
     65                             case 21:
     66                                 typeport = "(FTP)";
     67                                 break;
     68                             case 23:
     69                                 typeport = "(TELNET)";
     70                                 break;
     71                             case 25:
     72                                 typeport = "SMTP";
     73                                 break;
     74                             case 80:
     75                                 typeport = "HTTP";
     76                                 break;
     77                             case 110:
     78                                 typeport = "POP";
     79                                 break;
     80                             case 139:
     81                                 typeport = "netBIOS";
     82                                 break;
     83                             case 1433:
     84                                 typeport = "SQL Server";
     85                                 break;
     86                             case 3389:
     87                                 typeport = "Terminal Service";
     88                                 break;
     89                             case 443:
     90                                 typeport = "HTTPS";
     91                                 break;
     92                             case 1521:
     93                                 typeport = "Oracle";
     94                                 break;
     95                         }
     96                         
     97                         //端口没有特定类型
     98                         if( typeport.equals("0")){
     99                             ThreadScan.Result.append("
    ");
    100                         }else{
    101                             ThreadScan.Result.append(":" + typeport + "
    ");
    102                         }            
    103                     }catch( IOException e){}
    104                 }
    105             }
    106             if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){
    107                 ThreadScan.Result.append("
    " + "扫描完成...");
    108                 //请"确定"按钮设置为可用
    109                 if( !ThreadScan.Submit.setEnable( true ) );
    110             }
    111         }
    112         
    113         //按主机名进行端口扫描
    114         if( 1 == type ){
    115             for( i = MIN_port + NUM_thread; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText());
    116                     i += Integer.parseInt( ThreadScan.maxThread.getText( ) ) ) {
    117                 try{
    118                     theTcpSocket = new Socket( hostAddress, i );
    119                     theTcpSocket.close();
    120                     ThreadScan.Result.append(" " + i);
    121                     switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以
    122                         case 21:
    123                             typeport = "(FTP)";
    124                             break;
    125                         case 23:
    126                             typeport = "(TELNET)";
    127                             break;
    128                         case 25:
    129                             typeport = "SMTP";
    130                             break;
    131                         case 80:
    132                             typeport = "HTTP";
    133                             break;
    134                         case 110:
    135                             typeport = "POP";
    136                             break;
    137                         case 139:
    138                             typeport = "netBIOS";
    139                             break;
    140                         case 1433:
    141                             typeport = "SQL Server";
    142                             break;
    143                         case 3389:
    144                             typeport = "Terminal Service";
    145                             break;
    146                         case 443:
    147                             typeport = "HTTPS";
    148                             break;
    149                         case 1521:
    150                             typeport = "Oracle";
    151                             break;
    152                     }
    153                     if( typeport.equals("0") ){
    154                         ThreadScan.Result.append("
    ");
    155                     }else{
    156                         ThreadScan.Result.append(":" + typeport + "
    ");
    157                     }
    158                 }catch( IOException e){
    159                     
    160                 }
    161             }
    162             if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){
    163                 ThreadScan.Result.append("
    " + "扫描完成...");
    164                 if( !ThreadScan.Submit.isEnable()){
    165                     ThreadScan.Submit.setEnabled( true );
    166                 }
    167             }        
    168         }//End of if
    169     }
    170 }
      1 import java.net.*;
      2 import java.io.*;
      3 import java.awt.*;
      4 import java.awt.event.*;
      5 import javax.swing.*;
      6 /**
      7  * 实现扫描的主体程序,TreadScan
      8  * @author Administrator
      9  *
     10  */
     11 
     12 public class ThreadScan {
     13     
     14     public static JFrame main = new JFrame("Scaner(V1.0)By Nevermore");    //注册框架类
     15     public static JTextArea Result = new JTextArea("", 4, 40);            //显示扫描结果
     16     public static JScrollPane resultPane = new 
     17             JScrollPane( Result, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
     18             JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
     19     
     20     
     21     public static JTextField nameHost = new JTextField("localhost", 8 );//输入主机名文本框
     22     public static JTextField fromip1 = new JTextField("0", 3);            //输入IP地址前三位的文本框
     23     public static JTextField fromip2 = new JTextField("0", 3);            //输入IP地址4~6位的文本框
     24     public static JTextField fromip3 = new JTextField("0", 3);            //输入IP地址7~9位的文本框
     25     public static JTextField fromip4 = new JTextField("0", 3);            //输入IP地址后三位的文本框
     26     
     27     public static JTextField toip = new JTextField("0", 3);                //输入目标IP地址后四位
     28     
     29     public static JTextField minPort = new JTextField("0", 4);            //最小端口输入框
     30     public static JTextField maxPort = new JTextField("1000", 4);        //最大端口输入框
     31     
     32     public static JTextField maxThread = new JTextField("100", 3);        //最大线程数
     33     public static JDialog DLGError = new JDialog(main, "错误!");        //错误提示框
     34     public static JLabel DLGINFO = new JLabel("");
     35     public static JLabel type = new JLabel("请选择:");
     36     //扫描类型
     37     public static JRadioButton radioIP = new JRadioButton("IP地址:");
     38     public static JRadioButton radioHost = new JRadioButton("主机名:", true);
     39     //单选按钮组
     40     public static ButtonGroup group= new ButtonGroup();
     41     public static JLabel p1 = new JLabel("端口范围:");
     42     public static JLabel p2 = new JLabel("~");
     43     public static JLabel p3 = new JLabel("~");
     44     public static JLabel Pdot1 = new JLabel(".");
     45     public static JLabel Pdot2 = new JLabel(".");
     46     public static JLabel Pdot3 = new JLabel(".");
     47     public static JLabel TNUM = new JLabel("线程数:");
     48     public static JLabel RST = new JLabel("扫描结果:");
     49     public static JLabel con = new JLabel("");
     50     //定义按钮
     51     public static JButton Ok = new JButton("确定");
     52     public static JButton Submit = new JButton("开始扫描");
     53     public static JButton Cancel = new JButton("退出");
     54     public static JButton saveButton = new JButton("保存扫描结果");
     55     //菜单栏设计:这一块好好学习学习
     56     public static JMenuBar myBar = new JMenuBar();
     57     public static JMenu myMenu = new JMenu("文件(F)");
     58     public static JMenuItem saveItem = new JMenuItem("保存扫描结果(S)");
     59     public static JMenuItem exitItem = new JMenuItem("退出(Q)");
     60     public static JMenu myMenu2 = new JMenu("帮助");
     61     public static JMenuItem helpItem = new JMenuItem("阅读");
     62     
     63     /**
     64      * 主方法
     65      */
     66     public static void main( String[] argcs ){
     67         main.setSize(500, 400);
     68         main.setLocation(400, 400);
     69         main.setResizable(false);
     70         main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     71         
     72         DLGError.setSize(300, 100);
     73         DLGError.setLocation(400, 400);
     74         //添加"菜单栏"
     75         myMenu.add(saveItem);
     76         myMenu.add(exitItem);
     77         
     78         myMenu2.add(helpItem);
     79         
     80         myBar.add(myMenu);//将菜单条目添加到菜单
     81         myBar.add(myMenu2);
     82         
     83         main.setJMenuBar(myBar);//将菜单添加到框架
     84         //设置热键
     85         myMenu.setMnemonic('F');
     86         saveItem.setMnemonic('S');
     87         //为"另存为"组建设置快捷键CTRL + S
     88         saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
     89         //采用表格包模式布局
     90         Container mPanel = main.getContentPane();
     91         GridBagConstraints c = new GridBagConstraints();
     92         c.insets = new Insets(10, 0, 0, 10);
     93         
     94         c.gridx = 0;// 设置表格坐标
     95         c.gridy = 0;
     96         c.gridwidth = 10;
     97         c.fill = GridBagConstraints.BOTH;
     98         c.anchor = GridBagConstraints.CENTER;
     99         mPanel.add(type, c);
    100         
    101         group.add(radioIP);
    102         group.add(radioHost);
    103         
    104         c.gridx = 0;
    105         c.gridy = 1;
    106         c.gridwidth = 1;
    107         c.fill = GridBagConstraints.BOTH;
    108         c.anchor = GridBagConstraints.CENTER;
    109         mPanel.add(radioIP, c);
    110         
    111         c.gridx = 1;
    112         c.gridy = 1;
    113         c.gridwidth = 1;
    114         c.fill = GridBagConstraints.CENTER;
    115         mPanel.add(fromip1, c);
    116         
    117         c.gridx = 2;
    118         c.gridy = 1;
    119         c.gridwidth = 1;
    120         c.fill = GridBagConstraints.BOTH;
    121         mPanel.add(Pdot1, c);
    122         
    123         c.gridx = 3;
    124         c.gridy = 1;
    125         c.gridwidth = 1;
    126         c.fill = GridBagConstraints.BOTH;
    127         c.anchor = GridBagConstraints.CENTER;
    128         mPanel.add(fromip2, c);
    129         
    130         c.gridx = 4;
    131         c.gridy = 1;
    132         c.gridwidth = 1;
    133         c.fill = GridBagConstraints.BOTH;
    134         c.anchor = GridBagConstraints.CENTER;
    135         mPanel.add(Pdot2, c);
    136         
    137         c.gridx = 5;
    138         c.gridy = 1;
    139         c.gridwidth = 1;
    140         c.fill = GridBagConstraints.BOTH;
    141         c.anchor = GridBagConstraints.CENTER;
    142         mPanel.add(fromip3, c);
    143         
    144         c.gridy = 1;
    145         c.gridx = 6;
    146         c.gridwidth = 1;
    147         c.fill = GridBagConstraints.BOTH;
    148         c.anchor = GridBagConstraints.CENTER;
    149         mPanel.add(Pdot3, c);
    150         
    151         
    152         c.gridx = 7;
    153         c.gridy = 1;
    154         c.gridwidth = 1;
    155         c.fill = GridBagConstraints.BOTH;
    156         c.anchor = GridBagConstraints.CENTER;
    157         mPanel.add(fromip4, c);
    158         
    159         c.gridx = 8;
    160         c.gridy = 1;
    161         c.gridwidth = 1;
    162         c.fill = GridBagConstraints.BOTH;
    163         c.anchor = GridBagConstraints.CENTER;
    164         mPanel.add(p2, c);
    165         
    166         c.gridx = 9;
    167         c.gridy = 1;
    168         c.gridwidth = 1;
    169         c.fill = GridBagConstraints.BOTH;
    170         c.anchor = GridBagConstraints.CENTER;
    171         mPanel.add(toip, c);
    172         
    173         c.gridx = 0;
    174         c.gridy = 2;
    175         c.gridwidth = 1;
    176         c.fill = GridBagConstraints.BOTH;
    177         c.anchor = GridBagConstraints.CENTER;
    178         mPanel.add(radioHost, c);
    179         
    180         c.gridx = 1;
    181         c.gridy = 2;
    182         c.gridwidth = 3;
    183         c.fill = GridBagConstraints.BOTH;
    184         c.anchor = GridBagConstraints.CENTER;
    185         mPanel.add(nameHost, c);
    186         
    187         c.gridx = 0;
    188         c.gridy = 3;
    189         c.gridwidth = 1;
    190         c.fill = GridBagConstraints.BOTH;
    191         c.anchor = GridBagConstraints.CENTER;
    192         mPanel.add(p1, c);
    193         
    194         c.gridx = 1;
    195         c.gridy = 3;
    196         c.gridwidth = 1;
    197         c.fill = GridBagConstraints.BOTH;
    198         c.anchor = GridBagConstraints.CENTER;
    199         mPanel.add(minPort, c);
    200         
    201         c.gridx = 2;
    202         c.gridy = 3;
    203         c.gridwidth = 1;
    204         c.fill = GridBagConstraints.BOTH;
    205         c.anchor = GridBagConstraints.CENTER;
    206         mPanel.add(p3, c);
    207         
    208         c.gridx = 3;
    209         c.gridy = 3;
    210         c.gridwidth = 1;
    211         c.fill = GridBagConstraints.BOTH;
    212         c.anchor = GridBagConstraints.CENTER;
    213         mPanel.add(maxPort, c);
    214         
    215         c.gridx = 0;
    216         c.gridy = 4;
    217         c.gridwidth = 1;
    218         c.fill = GridBagConstraints.BOTH;
    219         c.anchor = GridBagConstraints.CENTER;
    220         mPanel.add(TNUM, c);
    221         
    222         c.gridx = 1;
    223         c.gridy = 4;
    224         c.gridwidth = 3;
    225         c.fill = GridBagConstraints.BOTH;
    226         c.anchor = GridBagConstraints.CENTER;
    227         mPanel.add(maxThread, c);
    228         
    229         c.gridx = 0;
    230         c.gridy = 5;
    231         c.gridwidth = 3;
    232         c.fill = GridBagConstraints.BOTH;
    233         c.anchor = GridBagConstraints.CENTER;
    234         mPanel.add(Submit, c);
    235     
    236         
    237         c.gridx = 3;
    238         c.gridy = 5;
    239         c.gridwidth = 3;
    240         c.fill = GridBagConstraints.BOTH;
    241         c.anchor = GridBagConstraints.CENTER;
    242         mPanel.add(saveButton, c);
    243         
    244         c.gridx = 6;
    245         c.gridy = 5;
    246         c.gridwidth =4;
    247         c.fill = GridBagConstraints.BOTH;
    248         c.anchor = GridBagConstraints.CENTER;
    249         mPanel.add(Cancel, c);
    250         
    251         c.gridx = 0;
    252         c.gridy = 6;
    253         c.gridwidth = 10;
    254         c.fill = GridBagConstraints.BOTH;
    255         c.anchor = GridBagConstraints.CENTER;
    256         mPanel.add(RST, c);
    257         
    258         //设置文本域可以换行
    259         Result.setLineWrap(true);
    260         //设置文本域不可编辑
    261         Result.setEditable(false);
    262         
    263         
    264         c.gridx = 0;
    265         c.gridy = 7;
    266         c.gridwidth = 10;
    267         c.gridheight = 4;
    268         c.fill = GridBagConstraints.VERTICAL;
    269         c.anchor = GridBagConstraints.CENTER;
    270         mPanel.add(resultPane, c);
    271         
    272         Container dPanel = DLGError.getContentPane();
    273         dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
    274         dPanel.add(DLGINFO);
    275         dPanel.add(Ok);
    276         
    277         
    278         Submit.addActionListener(new SubmitAction());
    279         Cancel.addActionListener(new CancelAction());
    280         Ok.addActionListener(new OkAction());
    281         
    282         //实现保存功能
    283         saveItem.addActionListener(new java.awt.event.ActionListener(){
    284             public void actionPerformed(java.awt.event.ActionEvent e){
    285                 JFileChooser fc = new JFileChooser();
    286                 int returnVal = fc.showSaveDialog(null);
    287                 //单击保存按钮
    288                 if( 0 == returnVal ){
    289                     File saveFile = fc.getSelectedFile();
    290                     try{
    291                         FileWriter writeOut = new FileWriter( saveFile );
    292                         writeOut.write(ThreadScan.Result.getText());
    293                         writeOut.close();
    294                         
    295                     }catch( IOException ex ){ System.out.println("保存失败");}
    296                 }
    297             }
    298         });
    299         //实现退出功能
    300         ActionListener li =  new java.awt.event.ActionListener(){
    301             public void actionPerformed(java.awt.event.ActionEvent e){
    302                 System.exit(0);
    303             }
    304         };
    305         exitItem.addActionListener(li);
    306         //实现帮助功能
    307         
    308         ActionListener lil =  new java.awt.event.ActionListener(){
    309             public void actionPerformed(java.awt.event.ActionEvent e){
    310                 new AboutDialog();//
    311             }
    312         };
    313         helpItem.addActionListener(lil);
    314         
    315         ActionListener lill =  new java.awt.event.ActionListener(){
    316             public void actionPerformed(java.awt.event.ActionEvent e){
    317                 JFileChooser fc = new JFileChooser();
    318                 int returnVal = fc.showSaveDialog(null);
    319                 //单击保存按钮
    320                 if( 0 == returnVal ){
    321                     File saveFile = fc.getSelectedFile();
    322                     try{
    323                         FileWriter writeOut = new FileWriter(saveFile);
    324                         writeOut.write(ThreadScan.Result.getText());
    325                         writeOut.close();
    326                     }catch(IOException ex ){ System.out.println("保存失败");}
    327                 }else{
    328                     return;//单击取消
    329                 }
    330                 
    331             }
    332         };
    333         saveButton.addActionListener(lill);
    334         main.setVisible(true);
    335     }
    336 }
    337 /**
    338  * 
    339  * @author Nevermore
    340  *    实现取消功能
    341  */
    342 class CancelAction implements ActionListener{
    343     public void actionPerformed( ActionEvent e){
    344         System.exit(0);
    345     }
    346 }
    347 /**
    348  * 
    349  * @author Nevermore
    350  *    实现确定按钮
    351  */
    352 class SubmitAction implements ActionListener{
    353     public void actionPerformed( ActionEvent a){
    354         int minPort;
    355         int maxPort;
    356         int maxThread;
    357         
    358         int ip1 = 0;
    359         int ip2 = 0;
    360         int ip3 = 0;
    361         int ipstart = 0;
    362         int ipend = 0;
    363         
    364         String ipaddress = "";
    365         String nameHost = "";
    366         ThreadScan.Result.setText("");
    367         if( ThreadScan.Submit.isEnabled()){
    368             ThreadScan.Submit.setEnabled(false);
    369         }
    370         /**
    371          * 判断扫描类型
    372          * 根据IP地址扫描 type = 0
    373          *根据主机名称扫描type = 1
    374          */
    375         if( ThreadScan.radioIP.isSelected()){
    376             TcpThread.type = 0;
    377             //判断IP地址的前三位是否是int型
    378             try{
    379                 ip1 = Integer.parseInt(ThreadScan.fromip1.getText());
    380             }catch( NumberFormatException e ){
    381                 ThreadScan.DLGINFO.setText("错误的IP地址");
    382                 ThreadScan.DLGError.setVisible(true);
    383                 return;
    384             }
    385             try{
    386                 ip2 = Integer.parseInt(ThreadScan.fromip2.getText());
    387             }catch( NumberFormatException e ){
    388                 ThreadScan.DLGINFO.setText("错误的IP地址");
    389                 ThreadScan.DLGError.setVisible(true);
    390                 return;
    391             }
    392             try{
    393                 ip3 = Integer.parseInt(ThreadScan.fromip3.getText());
    394             }catch( NumberFormatException e ){
    395                 ThreadScan.DLGINFO.setText("错误的IP地址");
    396                 ThreadScan.DLGError.setVisible(true);
    397                 return;
    398             }
    399             try{
    400                 ipstart = Integer.parseInt(ThreadScan.fromip4.getText());
    401             }catch( NumberFormatException e ){
    402                 ThreadScan.DLGINFO.setText("错误的IP地址");
    403                 ThreadScan.DLGError.setVisible(true);
    404                 return;
    405             }
    406             try{
    407                 ipend = Integer.parseInt(ThreadScan.toip.getText());
    408             }catch( NumberFormatException e ){
    409                 ThreadScan.DLGINFO.setText("错误的IP地址");
    410                 ThreadScan.DLGError.setVisible(true);
    411                 return;
    412             }
    413             
    414             //判断是否是合理的IP地址
    415             if(ip1 < 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||
    416                ip3 < 0 || ip3 > 255 || ipstart < 0 || ipstart > 255 ){
    417                 ThreadScan.DLGINFO.setText("IP地址为0~255的整数");
    418                 ThreadScan.DLGError.setVisible(true);
    419                 return ;
    420             }else{
    421                 TcpThread.ip1 = ip1;
    422                 TcpThread.ip2 = ip2;
    423                 TcpThread.ip3 = ip3;
    424                 TcpThread.ipstart = ipstart;
    425             }
    426             //判断目标IP地是否合理
    427             if( ipend < 0 || ipend > 255 ){
    428                 ThreadScan.DLGINFO.setText("目标IP地址的范围是0~255");
    429                 ThreadScan.DLGError.setVisible(true);
    430                 return;
    431             }else{
    432                 TcpThread.ipend = ipend;
    433             }
    434             
    435             ipaddress = "" + ip1 + ip2 + ip3 + ipstart;
    436             
    437             /**
    438              * 判断IP地址的有效性
    439              */
    440             try{
    441                 TcpThread.hostAddress = InetAddress.getByName(ipaddress);
    442             }catch( UnknownHostException e){
    443                 ThreadScan.DLGINFO.setText("错误的IP或IP地址不可到达!");
    444                 ThreadScan.DLGError.setVisible(true);
    445                 return;
    446             }
    447             
    448             if( ThreadScan.radioHost.isSelected()){
    449                 TcpThread.type = 1;
    450                 /**
    451                  * 判断主机名的有效性
    452                  */
    453                 try{
    454                     TcpThread.hostAddress = InetAddress.getByName(ThreadScan.nameHost.getText());
    455                 }catch( UnknownHostException e){ 
    456                     ThreadScan.DLGINFO.setText("错误的域名或地址不可到达!");
    457                     ThreadScan.DLGError.setVisible(true);
    458                     return;
    459                 }
    460             }
    461             /**
    462              * 判断端口号的有效性
    463              */
    464             try{
    465                 minPort = Integer.parseInt(ThreadScan.minPort.getText());
    466                 maxPort = Integer.parseInt(ThreadScan.maxPort.getText());
    467                 maxThread = Integer.parseInt(ThreadScan.maxThread.getText());
    468             }catch( NumberFormatException e ){
    469                 ThreadScan.DLGINFO.setText("错误的端口号或端口号和线程数必须为整数");
    470                 ThreadScan.DLGError.setVisible(true);
    471                 return;
    472             }
    473             /**
    474              * 判断最小端口号的有效范围
    475              * 判断条件大于0小于65535最大端口号大于最小端口号
    476              */
    477             if( minPort < 0 || minPort > 65535 || minPort > maxPort ){
    478                 ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");
    479                 ThreadScan.DLGError.setVisible(true);
    480                 return;
    481             }else{
    482                 TcpThread.MIN_port = minPort;
    483             }
    484             /**
    485              * 判断最大端口号的有效范围
    486              */
    487             if( maxPort < 0 || maxPort > 65535 || maxPort < minPort ){
    488                 ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");
    489                 ThreadScan.DLGError.setVisible(true);
    490                 return;
    491             }else{
    492                 TcpThread.MAX_port = maxPort;
    493             }
    494             /**
    495              * 判断线程数的有效范围
    496              * 判断条件 大于1且小于200
    497              */
    498             if( maxThread < 1 || maxThread > 200 ){
    499                 ThreadScan.DLGINFO.setText("线程数的有效范围是1~200");
    500                 ThreadScan.DLGError.setVisible(true);
    501                 return;
    502             }
    503             ThreadScan.Result.append("线程数" + ThreadScan.maxThread.getText() + "
    ");
    504             
    505             /**
    506              * 启动线程
    507              */
    508             for( int i = 0; i < maxThread; i++ ){
    509                 new TcpThread("T" + i, i).start();
    510             }
    511         }    
    512     }
    513 }
    514 /**
    515  * 
    516  * @author Administrator
    517  *    错误对话框
    518  */
    519 class OkAction implements ActionListener{
    520     public void actionPerformed( ActionEvent e){
    521         ThreadScan.DLGError.dispose();
    522     }
    523 }
    import javax.swing.*;
    import java.awt.*;
    
    public class AboutDialog extends JDialog{
        JPanel JMainPane = new JPanel();
        JTabbedPane jTabbedPane = new JTabbedPane();
        
        private JPanel JPanel1 = new JPanel();
        private JPanel JPanel2 = new JPanel();
        
        private JTextArea jt1 = new JTextArea(6, 6);
        private JTextArea jt2 = new JTextArea(6, 6);
        
        /**
         * 构造函数
         */
         public AboutDialog(){
             setTitle("Scaner");
             setSize(300,200);
             setResizable(false);
             setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE);
             
             Container c = this.getContentPane();
             
             jt1.setSize(260,200);
             jt2.setSize(260,200);
             jt1.setEditable(false);
             jt2.setEditable(false);
             jt1.setLineWrap(true);
             jt2.setLineWrap(true);
             
             jt1.setText("");
             jt1.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));
             jt2.setText("");
             jt2.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));
             
             jt1.setForeground(Color.black);
             jt2.setForeground(Color.black);
             
             JPanel1.add(jt1);
             JPanel2.add(jt2);
             
             jTabbedPane.setSize(300,200);
             jTabbedPane.addTab("扫描原理", null, JPanel1, null);
             jTabbedPane.addTab("使用说明", null, JPanel2, null);
             JMainPane.add(jTabbedPane);
             c.add(JMainPane);
             pack();
             this.setVisible(true);
         }
    }
  • 相关阅读:
    ansible plugins 列表
    ansible common modules
    CentOS 7.3降低内核版本为7.2
    ansible ad-hoc 参考
    kafka监控工具kafka-manager
    zookeeper监控之taokeeper
    linux的ulimit各种限制之深入分析
    docker版的zabbix部署
    kubernetes介绍(1)
    部署k8s时容器中ping不通
  • 原文地址:https://www.cnblogs.com/silianbo/p/4628758.html
Copyright © 2011-2022 走看看