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

📄 threadscan.java

📁 端口扫描 可以查看自己的pc有哪些端口是打开的
💻 JAVA
字号:
import java.net.*;
import java.io.*;
//import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ThreadScan
{
	public static JFrame main=new JFrame("端口扫描程序");
	public static JTextArea Result=new JTextArea("",4,60);
	public static JTextField hostname=new JTextField("localhost",8);
	public static JTextField minPort=new JTextField("0",4);
	public static JTextField maxPort=new JTextField("1024",4);
	public static JTextField maxThread=new JTextField("100",3);//以上都是初始
	public static JDialog DLGError=new JDialog(main,"错误!");  //化数据
	public static Label DLGINFO=new Label("");
	public static Label status=new Label("扫描状态:未开始");



	public static void main(String[] args)
	{
		main.setSize(500,220);
		main.setLocation(300,300);
		main.setResizable(false);
		DLGError.setSize(300,100);
		DLGError.setLocation(400,400);
		JPanel mainPanel = new JPanel();
		Label H=new Label("ip或域名:");
		Label P1=new Label("端口范围:");
		Label P2=new Label("~");
		Label TNUM=new Label("线程数:");
		Label RST=new Label("扫描结果:                                       ");
		Label con=new Label("                                                                                                              ");
		Result.setLineWrap(true);
		Result.setEditable(false);
		JButton OK = new JButton("确定");
		JButton Submit = new JButton("确定");
		JButton Cancel = new JButton("取消");
                JButton Maker = new JButton("制作者");
		Container mPanel = main.getContentPane();
		Container dPanel = DLGError.getContentPane();
		mPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
		mPanel.add(H);
		mPanel.add(hostname);
		mPanel.add(P1);
		mPanel.add(minPort);
		mPanel.add(P2);
		mPanel.add(maxPort);
		mPanel.add(TNUM);
		mPanel.add(maxThread);
		mPanel.add(RST);
		mPanel.add(Result);
		mPanel.add(con);
		mPanel.add(Submit);
		mPanel.add(Maker);
		mPanel.add(status);
                
	  dPanel.add(DLGINFO);
	  dPanel.add(OK);
          
    main.setVisible(true);                        //以上都是设计窗口
    Submit.addActionListener(new SubmitAction());
    Cancel.addActionListener(new CancelAction());
    OK.addActionListener(new OKAction());
    Maker.addActionListener(new MakerAction());      //设置响应事件
   }
}
;

class TCPThread extends Thread    //线程
{    
	public static InetAddress hostAddress;
	public static int MIN_port;
	public static int MAX_port;
	private int threadnum;    
	public TCPThread(String name,int threadnum) 
	{        
		super(name);        
		this.threadnum = threadnum;    
	}  
        
        
       public void run() 
	{
		int i;        
		Socket theTCPsocket;
		for (i = MIN_port+threadnum; i < MAX_port; i += Integer.parseInt(ThreadScan.maxThread.getText())) 
		{
			ThreadScan.status.setText("扫描状态:正在扫描 "+i+" 端口");
			try
			{
				theTCPsocket=new Socket(hostAddress,i);
				theTCPsocket.close();
				ThreadScan.Result.append(" "+i);
				ThreadScan.Result.append(",");
			}
			catch (IOException e)// 如果本成功连接 会跳到这
			{}
		}
		if (i==MAX_port)
		{
			ThreadScan.Result.append("\n"+"扫描完成...");
			ThreadScan.status.setText("扫描状态:完成!");
		}
	}
}


class CancelAction implements ActionListener
{
	public void actionPerformed (ActionEvent e)
	{
		System.exit(1);
	}
}

class SubmitAction implements ActionListener
{
	public void actionPerformed (ActionEvent a) 
	{
		int minPort;
		int maxPort;
		int maxThread;
		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);
			ThreadScan.status.setText("扫描状态:未开始");
			return;
		}
		try
		{
			TCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.getText());
		}
		catch(UnknownHostException e)
		{
			ThreadScan.DLGINFO.setText("            错误的IP地址/域名或地址不可达!            ");
			ThreadScan.DLGError.setVisible(true);
			ThreadScan.status.setText("扫描状态:未开始");
			return;
		}
		if(minPort<0 || minPort>65535 || minPort>maxPort)
		{
			ThreadScan.DLGINFO.setText("最小端口必须是0-65535并且小于最大端口的整数!");
			ThreadScan.DLGError.setVisible(true);
			return;			
		}
		else TCPThread.MIN_port=minPort;
		if(maxPort<0 || maxPort>65535 || maxPort<minPort)
		{
			ThreadScan.DLGINFO.setText("最大端口必须是0-65535并且大于最小端口的整数!");
			ThreadScan.DLGError.setVisible(true);
			ThreadScan.status.setText("扫描状态:未开始");
			return;	
		}
		else TCPThread.MAX_port=maxPort;
		if(maxThread<1 || maxThread>200)
		{
			ThreadScan.DLGINFO.setText("                    线程数为1-200的整数!                    ");
			ThreadScan.DLGError.setVisible(true);
			ThreadScan.status.setText("扫描状态:未开始");
			return;
		}
		ThreadScan.Result.setText("");
		ThreadScan.Result.append("正在扫描 "+ThreadScan.hostname.getText()+" 线程数 "+ThreadScan.maxThread.getText()+"\n");
		ThreadScan.Result.append("开放端口: ");
		for(int i=0;i<maxThread;i++)               //设置线程的数量
		{
			new TCPThread("T" + i,i).start();        //启用线程
		}
	}
}

class MakerAction implements ActionListener{   //关于这个软件的信息
	public void actionPerformed (ActionEvent a){
		JFrame f1=new JFrame("关于这个软件");
		JTextArea a1=new JTextArea(12,12);
		JLabel l2=new JLabel("制作者:1宋立森");
		JLabel l5=new JLabel("完成时间:06年12月23号");
		JLabel l6=new JLabel("");
		final JPanel p1=new JPanel();
		p1.add(a1);
		JPanel p2=new JPanel();
		p2.setLayout(new GridLayout(6,2));
		p2.add(l2);
		p2.add(l5);
		p2.add(l6);
		p1.setLayout(new BorderLayout());
		p1.add(p2,BorderLayout.CENTER);
		f1.add(p1, BorderLayout.CENTER);
		f1.setBounds(200,300,150,150);
		f1.pack();
		f1.setVisible(true);	
	}
}

class OKAction implements ActionListener
{
	public void actionPerformed (ActionEvent e)
	{
		ThreadScan.DLGError.dispose();
	}
}

⌨️ 快捷键说明

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