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

📄 mygraduate.java

📁 对一定范围内的IP地址进行端口服务扫描 并保存扫描结果
💻 JAVA
字号:
import java.net.*;
import java.util.Date;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.tree.*; 
import java.util.Enumeration; 
import javax.swing.event.*;

public class MyGraduate
{
  	
   static   JTree newtr = null; 
   static   int  issaved=0; 
   static   DefaultMutableTreeNode treecode;
   static	MyIpPanel ip1 =new MyIpPanel("                              IP地址范围 :                   ");
   static   JButton submit=new JButton("扫描");
   static   JButton result=new JButton("save result");
   static   JButton exit  =new JButton("退出");
   static   JFrame jf     =new JFrame("端口扫描");
   static   JPanel portInfo=new JPanel(); 
   static   JTextField text1=new JTextField(3);
   static 	JTextField text2=new JTextField(3);
   static boolean saveresult()
   {
        File file=new File(System.getProperty("user.dir"),"result.txt");
        try
        {
        	if(!file.exists())
            file.createNewFile();
        }
        catch(Exception u34)
        {  return false;  } 
        try
        {
        BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
        writer.write("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        writer.write("\r\n");
        writer.write(new Date().toString());
        writer.write("\r\n");
        writer.flush();
        for (Enumeration e=MyGraduate.treecode.children(); e.hasMoreElements(); ) 
        {
               TreeNode n = (TreeNode)e.nextElement();
               visitAllNodes(n,writer);
        }
        writer.close();
        return true;
        }
        catch(Exception e)
        {
        	return false;
        }

    }
   static void visitAllNodes(TreeNode node,Writer writer)
    {
       try
       {
      	writer.write(node.toString());
        writer.write("\r\n");
       }
       catch(Exception ek)
       {}
       if (node.getChildCount()>0) 
       {
           for (Enumeration e=node.children(); e.hasMoreElements(); ) 
           {
               TreeNode n = (TreeNode)e.nextElement();
               visitAllNodes(n,writer);
           }
       } 
   } 
   static  int judgementOfIP()
   {
   	  int i1,i2,i3,i4,i5,i6,i7;
   	  try
   	  {
   	   	 i1=Integer.parseInt(ip1.text1.getText());
   	     i2=Integer.parseInt(ip1.text2.getText());
   	   	 i3=Integer.parseInt(ip1.text3.getText());
   	   	 i4=Integer.parseInt(ip1.text4.getText());
   	   	 i5=Integer.parseInt(ip1.text5.getText());
   	   	 i6=Integer.parseInt(MyGraduate.text1.getText());
   	   	 i7=Integer.parseInt(MyGraduate.text2.getText());
   	  }
   	  catch(NumberFormatException e)
   	  {
   	  	return 1;
   	  }
   	  if(i1==0||i1>233)
   	    return 1;
   	  if(i2>255)
        return 1;
      if(i3>255)
        return 1;
      if(i4>255)
        return 1; 
      if(i5>255)
        return 1;
      if(i6==0||i7==0||i6>i7)
         return 2;           
   	  return 3;
   }
   static   public void main(String[] args)
   {
   	JPanel  p1=new JPanel();
   	p1.setLayout(new GridLayout(3, 1));
    treecode = new DefaultMutableTreeNode("活动主机",true); 
    newtr = new JTree(treecode); 
    JScrollPane jp= new JScrollPane(newtr);  
   	jf.setSize(500,400);
   	jf.getContentPane().setLayout(new GridLayout(1, 2));
   	jf.add(jp);
   	p1.add(ip1.p1);
   	JLabel label0=new JLabel("端口范围:");
   	JLabel label1=new JLabel("~");
   	text2.setDocument(new NumberLenghtLimitedDmt(3));
   	text1.setDocument(new NumberLenghtLimitedDmt(3));
   	text1.setText("1");
   	text2.setText("100");
   	portInfo.setLayout(new FlowLayout(FlowLayout.LEFT));
   	portInfo.add(label0);
   	portInfo.add(text1);
   	portInfo.add(label1);
   	portInfo.add(text2);
   	JPanel p2=new JPanel();
   	p2.setLayout(new FlowLayout(FlowLayout.LEFT));
   	p2.add(submit);
   	p2.add(result);
   	p2.add(exit);
   	p1.add(portInfo);
    newtr.addTreeSelectionListener( new TreeSelectionListener() { 
          public void valueChanged(TreeSelectionEvent e) 
          { 
            JTree tree = (JTree) e.getSource(); 
            DefaultMutableTreeNode selectNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
            if(selectNode==null)
            	 return;
            try
            { 
             	String node=selectNode.toString();
             	 if(node.startsWith("端口"))     
       	          {
       	    	
       	    	  	String s=node.substring(2);
       	  	        int i=Integer.parseInt(s);
       	  		    String sk="该端口服务此进程无法获取";
				   switch(i)
				   {
					case 21:
					sk="文件传输服务端口21";
					break;
					case 22:
					sk="远程登录协议端口22";
					break;
					case 25:
				    sk="简单邮件传输服务端口25";
					break; 
					case 80:
					sk="超文本传送协议端口80";
					break;
					case 110:
					sk="电子邮件(Pop3)端口110";
					break;
					case 119:
					sk="新闻组传输协议端口119";
					break;
					case 143:
					sk="IMAP服务端口143";
					break;
					case 135:
					sk="微软DCE RPC end-point mapper服务端口135";
					break;
				} 
       	          
				JOptionPane.showMessageDialog(MyGraduate.jf,sk,"端口"+s,JOptionPane.INFORMATION_MESSAGE );
              }
             }
            catch(Exception ew)
            {
            	JOptionPane.showMessageDialog(MyGraduate.jf,ew.toString(),"端口",JOptionPane.INFORMATION_MESSAGE );
            }
         } 
    });
   	p1.add(p2);
   	jf.add(p1);
   	result.addActionListener(new ActionListener() {
   		 public void actionPerformed(ActionEvent ek)
   		 {
                           		 	int number=MyGraduate.treecode.getChildCount();
   		 	if(number==0)
   		 	{
   		 		  JOptionPane.showMessageDialog(MyGraduate.jf,"没有端口扫描结果需要保存!","警告",JOptionPane.WARNING_MESSAGE ); 
   		           return ;
   		    } 
   		 	if(MyGraduate.issaved!=1)
   		 	{
   		 		  JOptionPane.showMessageDialog(MyGraduate.jf,"扫描结果已经保存,无需再次保存!","警告",JOptionPane.WARNING_MESSAGE ); 
   		           return ;
   		    }
   		    MyGraduate.issaved=0;
   		    if(MyGraduate.saveresult())
   		      JOptionPane.showMessageDialog(MyGraduate.jf,"扫描结果成功保存!","成功",JOptionPane.WARNING_MESSAGE ); 
   		    else
   		      JOptionPane.showMessageDialog(MyGraduate.jf,"扫描结果保存失败!","失败",JOptionPane.WARNING_MESSAGE );  
   		     	
   		 }
    });
   	submit.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent ek)
   	     {      
   	    	if(MyGraduate.judgementOfIP()==1)
   	    	{
   	    		JOptionPane.showMessageDialog(MyGraduate.jf,"IP地址输入错误","Warning!",JOptionPane.WARNING_MESSAGE );
   	        }
   	        else if(MyGraduate.judgementOfIP()==2)
   	        {
   	            JOptionPane.showMessageDialog(MyGraduate.jf,"端口输入错误","Warning!",JOptionPane.WARNING_MESSAGE );	
   	        }
   	        else
   	     	{    
   	     	     int number=MyGraduate.treecode.getChildCount();
   	     	     MyGraduate.issaved=1;
   	     	     if(number>0)
   	     	     {
   	     	     	MutableTreeNode jd[]=new MutableTreeNode[number];
   	     	     	Enumeration e=MyGraduate.treecode.children();
   	     	     	int jdk=number;
                    while(e.hasMoreElements()) 
                    {  
                      jd[--number]=(MutableTreeNode)e.nextElement();
                    }
                    for(int i=0;i<jdk;i++)
                      TCPThread.treemodel.removeNodeFromParent(jd[i]);
   	     	     }
   	     		 MyGraduate.submit.setEnabled(false);
   	     		 MyGraduate.result.setEnabled(false);
   	    	     String s=MyGraduate.ip1.text1.getText()+"."+
   	    	     		  MyGraduate.ip1.text2.getText()+"."+
   	    	     		  MyGraduate.ip1.text3.getText()+".";
   	    	     int start=Integer.parseInt(MyGraduate.ip1.text4.getText());
   	    	     int end =Integer.parseInt(MyGraduate.ip1.text5.getText());	
   	    	     if(end<start)
   	    	     {
   	    	     	int j=start;
   	    	     	start=end;
   	    	     	end=j;
   	    	     }
   	    	     TCPThread.MIN_port=Integer.parseInt(text1.getText());
   	    	     TCPThread.MAX_port=Integer.parseInt(text2.getText());
   	    	     TCPThread.hostnumber=end-start+1;	  
   	    	     for(int i=start;i<=end;i++)
   	    	     {
   	    	     	String middle=s+i;
   	    	     	try
   	    	     	{
   	    	     	InetAddress hostAdd=InetAddress.getByName(middle.toString());
			        if(hostAdd.getHostName().equalsIgnoreCase(middle))
			        {
			        middle=middle+"无活动";	
			        DefaultMutableTreeNode	treecode1=new DefaultMutableTreeNode(middle.toString());
   	    	        TCPThread.treemodel.insertNodeInto(treecode1, MyGraduate.treecode, 
                    MyGraduate.treecode.getChildCount());
                    TCPThread.scanedhost=TCPThread.scanedhost+TCPThread.threadnum;
                    continue;
                    } 
                    }
                    catch(Exception jikl)
                    { 
                    TCPThread.scanedhost= TCPThread.scanedhost+TCPThread.threadnum;
                    continue;
                    }
                    DefaultMutableTreeNode	treecode1=new DefaultMutableTreeNode(middle.toString());
   	    	        TCPThread.treemodel.insertNodeInto(treecode1, MyGraduate.treecode, 
                    MyGraduate.treecode.getChildCount());
                     for(int k=0;k<TCPThread.threadnum;k++)
   	    	          new  TCPThread(middle,treecode1,k);
   	    	     }
   	    	     if(TCPThread.scanedhost==TCPThread.hostnumber*TCPThread.threadnum)
   	    	     {
   	    	     	MyGraduate.submit.setEnabled(true);
   	     	        MyGraduate.result.setEnabled(true);
   	    	     	TCPThread.scanedhost=0;
   	    	     }
   	    	}
   	    	
   	    }
                      });
                       
   	exit.addActionListener(new exitEvent());
   	jf.setResizable(false);
   	jf.getRootPane().setDefaultButton(submit);
    jf.setVisible(true);
   }	
}
class MyIpPanel  
{
	JTextField  text1=new JTextField(3);
	JTextField  text2=new JTextField(3);
	JTextField  text3=new JTextField(3);
	JTextField  text4=new JTextField(3);
	JLabel      label1=new JLabel(".");
	JLabel      label2=new JLabel(".");
	JLabel      label3=new JLabel(".");
	JLabel      label4=new JLabel("~");
	JTextField  text5=new JTextField(3);
	JPanel      p1=new JPanel();
    MyIpPanel(String s)
	{
	   text1.setDocument(new NumberLenghtLimitedDmt(3));
	   text2.setDocument(new NumberLenghtLimitedDmt(3));
	   text3.setDocument(new NumberLenghtLimitedDmt(3));
	   text4.setDocument(new NumberLenghtLimitedDmt(3));
	   text5.setDocument(new NumberLenghtLimitedDmt(3));
	   p1.setLayout(new FlowLayout(FlowLayout.RIGHT));
	   JLabel label=new JLabel(s);
	   p1.add(label);
	   p1.add(text1);
	   p1.add(label1);
	   p1.add(text2);
	   p1.add(label2);
	   p1.add(text3);
	   p1.add(label3);
	   p1.add(text4);
	   p1.add(label4);
	   p1.add(text5);
	}
}
class NumberLenghtLimitedDmt extends PlainDocument 
{
 
   private int limit; 
   public NumberLenghtLimitedDmt(int limit)
   {
       super();
       this.limit = limit;
   }  
   public void insertString(int offset, String  str, AttributeSet attr) throws BadLocationException 
   {   
       if (str == null)
       {
        return;
       }
       if ((getLength() + str.length()) <= limit) 
       { 
       char[] upper = str.toCharArray();
       int length=0;
       for (int i = 0; i < upper.length; i++) 
       {       
           if (upper[i]>='0'&&upper[i]<='9')
           {           
              upper[length++] = upper[i];
           }
       }
         super.insertString(offset, new String(upper,0,length), attr);
      }
    }
}
	   
class exitEvent implements   ActionListener
{
   	 public void actionPerformed(ActionEvent e)
   	 {
   	    System.exit(0);
     }
}	 
class TCPThread extends Thread 
{    
    String hostAddress;
    static int hostnumber=0;
    static int scanedhost=0;
    DefaultMutableTreeNode treecode;
    public static final  DefaultTreeModel treemodel=(DefaultTreeModel)MyGraduate.newtr.getModel();
	public static   int MIN_port=1;
	public static   int MAX_port=100;
    static final int threadnum=7; 
    String s;//记录活动端口
	int startPort;   
	public TCPThread(String host ,DefaultMutableTreeNode code,int startPort) 
	{    
	      hostAddress=host;
	      treecode=code;
	      this.startPort=startPort;
	      this.start();     
  	}    
	public void run() 
	{
		int i;        
		Socket theTCPsocket;
		for (i = MIN_port+startPort; i < MAX_port; i += threadnum) 
		{
			try
			{  
			    theTCPsocket=new Socket(hostAddress,i);
                theTCPsocket.close(); 
			    s="端口"+i;
			    DefaultMutableTreeNode	subnode =new DefaultMutableTreeNode(s.toString());
			                    TCPThread.treemodel.insertNodeInto(subnode, treecode, 
                            treecode.getChildCount());
			}
			catch (Exception e)
			{  } 

	     }
	     scanedhost++;
	     if(TCPThread.scanedhost==hostnumber*TCPThread.threadnum)
   	     {
   	    	    MyGraduate.submit.setEnabled(true);
   	    	    MyGraduate.result.setEnabled(true);
   	    	    TCPThread.scanedhost=0;
   	     }
     }
}

⌨️ 快捷键说明

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