?? mygraduate.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 + -