| 查看: 235 | 回复: 0 | ||
| 当前主题已经存档。 | ||
[资源]
【原创】多线程端口扫描(Java)【已搜无重复】
|
||
|
最近复习Java,准备考试,写了个多线程端口扫描的小程序,请大家指教。 源代码如下: =============================================== import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; class scanPort extends Thread{ String host; int startPort; int endPort; int tag; display d; volatile boolean runStatus; scanPort(String h,int sp,int ep,int tg,display dis){ super(); host=h; startPort=sp; endPort=ep; tag=tg; d=dis; runStatus=true; } public synchronized void goRun() { try{ runStatus=true; notify(); // System.out.println("notify"); }catch(Exception e){ System.out.println(e.toString()); } } public synchronized void goWait() throws InterruptedException{ try{ while (runStatus==false){ wait(); } }catch(Exception e){ System.out.println(e.toString()); } } public void run(){ for(int i=startPort;i<=endPort;i++){ try{ goWait(); Socket s=new Socket(host,i); synchronized (d.jTextArea1){ d.jTextArea1.setText(d.jTextArea1.getText()+"Host:"+host.toString()+" Port: "+i+" is Opening."+tag+"线程"+"\n"); } } catch(IOException e){ synchronized (d.jTextArea1){ d.jTextArea1.setText(d.jTextArea1.getText()+"Host:"+host.toString()+" Port: "+i+" is Closed."+tag+"线程"+"\n"); } } catch(InterruptedException e){ System.out.println(e.toString()); } } } } class display extends JFrame { int threadNumber; int start; int end; String host; scanPort s[]; int status; JButton jButton1; JButton jButton2; JButton jButton3; JLabel jLabel1; JLabel jLabel2; JLabel jLabel3; JLabel jLabel4; JMenu jMenu1; JMenuBar jMenuBar1; JMenuItem jMenuItem1; JScrollPane jScrollPane1; JTextArea jTextArea1; JTextField jTextField1; JTextField jTextField2; JTextField jTextField3; selectThreadNumber se; public display() { threadNumber=1; status=0; jButton1=new JButton("开始扫描"); jButton2=new JButton("暂停扫描"); jButton3=new JButton("停止扫描"); jLabel1=new JLabel("请输入要扫描的IP地址:"); jLabel2=new JLabel("开始端口:"); jLabel3=new JLabel("结束端口:"); jMenuBar1=new JMenuBar(); jMenu1=new JMenu("设置"); jMenuItem1=new JMenuItem("设置线程数:"); jMenu1.add(jMenuItem1); jMenuBar1.add(jMenu1); jTextArea1=new JTextArea(); jScrollPane1=new JScrollPane(jTextArea1); jTextField1=new JTextField(); jTextField2=new JTextField("0"); jTextField3=new JTextField("65535"); this.add(jMenuBar1); this.add(jLabel1); this.add(jTextField1); this.add(jLabel2); this.add(jTextField2); this.add(jLabel3); this.add(jTextField3); this.add(jButton1); this.add(jButton2); this.add(jButton3); this.add(jScrollPane1); this.setLayout(null); jMenuBar1.setSize(300, 20); jMenuBar1.setLocation(0, 0); jLabel1.setSize(150, 20); jLabel1.setLocation(0,30); jTextField1.setSize(140, 20); jTextField1.setLocation(150,30); jLabel2.setSize(80,20); jLabel2.setLocation(0,60); jTextField2.setSize(60,20); jTextField2.setLocation(70,60); jLabel3.setSize(80,20); jLabel3.setLocation(150,60); jTextField3.setSize(60,20); jTextField3.setLocation(220,60); jButton1.setSize(90,20); jButton1.setLocation(5, 90); jButton2.setSize(90,20); jButton2.setLocation(100, 90); jButton3.setSize(90,20); jButton3.setLocation(195, 90); jScrollPane1.setSize(300,150); jScrollPane1.setLocation(0,120); jButton1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jButton1ActionPerformed(e); } }); jButton2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jButton2ActionPerformed(e); } }); jButton3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jButton3ActionPerformed(e); } }); jMenuItem1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ jMenuItem1ActionPerformed(e); } }); } private void jButton1ActionPerformed(ActionEvent evt) { s=new scanPort[threadNumber]; host=jTextField1.getText(); end=Integer.parseInt(jTextField3.getText()); start=Integer.parseInt(jTextField2.getText()); int theNumberOfPort=end-start+1; int everyThread[][]=new int[threadNumber][2]; for(int i=0;i if((everyThread[0]+theNumberOfPort/threadNumber-1)<=end){ everyThread[1]=everyThread[0]+theNumberOfPort/threadNumber-1; } else{ everyThread[1]=end; } s=new scanPort(host,everyThread[0],everyThread[1],i+1,this); s.start(); } } private void jButton2ActionPerformed(ActionEvent evt) { if(status==0){ jButton2.setText("继续扫描"); status=1; for(int i=0;i } } else{ jButton2.setText("暂停扫描"); status=0; for(int i=0;i s.goRun(); } } } private void jButton3ActionPerformed(ActionEvent evt) { status=0; for(int i=0;i } } private void jMenuItem1ActionPerformed(ActionEvent evt){ selectThreadNumber sel=new selectThreadNumber(this); sel.addWindowListener(new WindowAdapter(){ public void widnowClosing(WindowEvent e){ System.exit(0); } }); sel.show(); } public static void main(String args[]) { display dis=new display(); dis.setTitle("PortScaner"); dis.setSize(300, 300); dis.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); dis.show(); } } class selectThreadNumber extends JFrame{ JComboBox numberOfThread; JLabel lb1; JButton btn1; JButton btn2; int thNum; display d; selectThreadNumber(display dis){ d=dis; lb1=new JLabel("请选择线程数: "); btn1=new JButton("确定"); btn2=new JButton("取消"); numberOfThread=new JComboBox(); numberOfThread.addItem("1"); numberOfThread.addItem("2"); numberOfThread.addItem("3"); numberOfThread.addItem("4"); numberOfThread.addItem("5"); numberOfThread.addItem("6"); numberOfThread.addItem("7"); numberOfThread.addItem("8"); numberOfThread.addItem("9"); numberOfThread.addItem("10"); numberOfThread.addItem("11"); numberOfThread.addItem("12"); numberOfThread.addItem("13"); numberOfThread.addItem("14"); numberOfThread.addItem("15"); numberOfThread.addItem("16"); this.setLayout(null); this.add(lb1); this.add(numberOfThread); this.add(btn1); this.add(btn2); lb1.setSize(150,20); lb1.setLocation(10,10); numberOfThread.setSize(100,20); numberOfThread.setLocation(170,10); btn1.setSize(70,20); btn1.setLocation(30,50); btn2.setSize(70,20); btn2.setLocation(180,50); this.setSize(300, 100); this.setTitle("Select thread number"); btn1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ btn1ActionPerformed(e); } }); btn2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ btn2ActionPerformed(e); } }); } private void btn1ActionPerformed(ActionEvent evt){ thNum=numberOfThread.getSelectedIndex()+1; this.setVisible(false); d.threadNumber=thNum; } private void btn2ActionPerformed(ActionEvent evt){ this.dispose(); } } =============================================== 保存为scaner.java jdk1.6.0编译通过并正确运行! [ Last edited by bslt on 2009-4-14 at 18:00 ] |
» 猜你喜欢
孩子确诊有中度注意力缺陷
已经有9人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复













回复此楼