⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadscan.java

📁 java编写的端口扫描程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		Cancel.addActionListener(new CancleAction());
		OK.addActionListener(new OKAction());

		//实现保存功能
		saveItem.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				JFileChooser fc=new JFileChooser();
				int returnVal=fc.showSaveDialog(null);
				
				//点击“保存”
				if(returnVal == 0){
					File saveFile=fc.getSelectedFile();
					try {
						FileWriter writeOut = new FileWriter(saveFile);
						writeOut.write(ThreadScan.Result.getText());
						writeOut.close();
					}
					catch (IOException ex) {
						System.out.println("保存失败");
					}
				}
				//点击“取消”
				else
					return;
			}
		});

		//实现退出功能
		exitItem.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				System.exit(0);
			}
		});

		//实现帮助功能
		helpItem.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				new AboutDialog();
			}
		});

		saveButton.addActionListener(new java.awt.event.ActionListener() { 
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				JFileChooser fc=new JFileChooser();
				int returnVal=fc.showSaveDialog(null);
				
				//点击“保存”
				if(returnVal == 0){
					File saveFile=fc.getSelectedFile();
					try {
						FileWriter writeOut = new FileWriter(saveFile);
						writeOut.write(ThreadScan.Result.getText());
						writeOut.close();
					}
					catch (IOException ex) {
						System.out.println("保存失败");
					}
				}
				//点击“取消”
				else
					return;
			}
		});

		main.setVisible(true);
	}
}

/*
 *实现“取消”功能
 *退出程序
 */
class CancleAction implements ActionListener{

	public void actionPerformed (ActionEvent e){
		System.exit(0);
	}
}

/*
 *实现“确定”功能
 *完成扫描
 */
class SubmitAction implements ActionListener{

	public void actionPerformed (ActionEvent a){

		int minPort;
		int maxPort;
		int maxThread;

		int ip1 = 0;
		int ip2 = 0;
		int ip3 = 0;
		int ipstart = 0;
		int ipend = 0;
		
		String ipaddress = "";
		String hostname = "";

		ThreadScan.Result.setText("");
		//将"确定"按钮设置成为不可用
		if(ThreadScan.Submit.isEnabled()){
			ThreadScan.Submit.setEnabled(false);
		}

		/*
		 *判断搜索的类型
		 *按照ip地址扫描:type = 0
		 *按照主机名称扫描:type = 1
		 */
		if(ThreadScan.radioIp.isSelected()){
			
			TCPThread.type = 0;

			//判断ip的前3位是否为int型
			try{
				ip1=Integer.parseInt(fromip1.getText());
			}
			catch(NumberFormatException e){
				ThreadScan.DLGINFO.setText("错误的ip!");
				ThreadScan.DLGError.setVisible(true);
				return;
			}

			//判断ip的4~6位是否为int型
			try{
				ip2=Integer.parseInt(fromip2.getText());
			}
			catch(NumberFormatException e){
				ThreadScan.DLGINFO.setText("错误的ip!");
				ThreadScan.DLGError.setVisible(true);
				return;
			}

			//判断ip的7~9位是否为int型
			try{
				ip3=Integer.parseInt(fromip3.getText());
			}
			catch(NumberFormatException e){
				ThreadScan.DLGINFO.setText("错误的ip!");
				ThreadScan.DLGError.setVisible(true);
				return;
			}

			//判断起始ip的最后4位是否为int型
			try{
				ipstart=Integer.parseInt(fromip4.getText());
			}
			catch(NumberFormatException e){
				ThreadScan.DLGINFO.setText("错误的ip!");
				ThreadScan.DLGError.setVisible(true);
				return;
			}
			
			//判断目标ip的最后4位是否为int型
			try{
				ipend=Integer.parseInt(toip.getText());
			}
			catch(NumberFormatException e){
				ThreadScan.DLGINFO.setText("错误的目标ip!");
				ThreadScan.DLGError.setVisible(true);
				return;
			}
			
			//判断起始ip是否正确
			//判断条件:大于0且小于等于255
			if(ip1<0 || ip1>255||ip2<0 || ip2>255||ip3<0 || ip3>255||ipstart<0 || ipstart>255){
				ThreadScan.DLGINFO.setText("                    ip地址为0-255的整数!                    ");
				ThreadScan.DLGError.setVisible(true);
				return;
			}
			else{
				TCPThread.ip1 = ip1;
				TCPThread.ip2 = ip2;
				TCPThread.ip3 = ip3;
				TCPThread.ipstart = ipstart;
			}

			//判断目标ip是否正确
			//判断条件:大于0且小于等于255
			if(ipend<0 || ipend>255){
				ThreadScan.DLGINFO.setText("                    目标ip地址为0-255的整数!                    ");
				ThreadScan.DLGError.setVisible(true);
				return;
			}
			else{
				TCPThread.ipend = ipend;
			}
			
			ipaddress = "" + ip1 + ip2 + ip3 + ipstart;
			
			/*
			 *判断ip地址的有效性
			 */
			try{
				TCPThread.hostAddress=InetAddress.getByName(ipaddress);
			}
			catch(UnknownHostException e){
				ThreadScan.DLGINFO.setText("            错误的IP或地址不可达!            ");
				ThreadScan.DLGError.setVisible(true);
				return;
			}
		}
		
		//根据主机名进行端口扫描
		if(ThreadScan.radioHost.isSelected()){
			
			TCPThread.type = 1;
			
			/*
			 *判断主机名称的有效性
			 */
			try{
				TCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.getText());
			}
			catch(UnknownHostException e){
				ThreadScan.DLGINFO.setText("            错误的域名或地址不可达!            ");
				ThreadScan.DLGError.setVisible(true);
				return;
			}
		}

		/*
		 *判断端口号的有效性
		 */
		try{
			minPort=Integer.parseInt(ThreadScan.minPort.getText());
			maxPort=Integer.parseInt(ThreadScan.maxPort.getText());
			maxThread=Integer.parseInt(ThreadScan.maxThread.getText());
		}
		catch(NumberFormatException e){
			ThreadScan.DLGINFO.setText("错误的端口号或线程数!端口号和线程数必须为整数!");
			ThreadScan.DLGError.setVisible(true);
			return;
		}
		
		/*
		 *判断最小端口号的有效范围
		 *判断条件:大于0且小于65535,最大端口应大于最小端口
		 */
		if(minPort<0 || minPort>65535 || minPort>maxPort){
			ThreadScan.DLGINFO.setText("最小端口必须是0-65535并且小于最大端口的整数!");
			ThreadScan.DLGError.setVisible(true);
			return;			
		}
		else{
			TCPThread.MIN_port=minPort;
		}

		/*
		 *判断最大端口号的有效范围
		 *判断条件:大于0且小于65535,最大端口应大于最小端口
		 */
		if(maxPort<0 || maxPort>65535 || maxPort<minPort){
			ThreadScan.DLGINFO.setText("最大端口必须是0-65535并且大于最小端口的整数!");
			ThreadScan.DLGError.setVisible(true);
			return;	
		}
		else{
			TCPThread.MAX_port=maxPort;
		}

		/*
		 *判断线程数量的有效范围
		 *判断条件:大于1且小于200
		 */
		if(maxThread<1 || maxThread>200){
			ThreadScan.DLGINFO.setText("                    线程数为1-200的整数!                    ");
			ThreadScan.DLGError.setVisible(true);
			return;
		}

		ThreadScan.Result.append("线程数 "+ThreadScan.maxThread.getText()+"\n");
		
		//启动线程
		for(int i=0;i<maxThread;i++){
			new TCPThread("T" + i,i).start();
		}
	}
}

/*
 *实现错误提示框中的“确定”按钮功能
 */
class OKAction implements ActionListener{

	public void actionPerformed (ActionEvent e){
		ThreadScan.DLGError.dispose();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -