亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java網絡編程實現的簡單端口掃描器示例

2024-07-14 08:40:16
字體:
來源:轉載
供稿:網友

本文實例講述了Java網絡編程實現的簡單端口掃描器。分享給大家供大家參考,具體如下:

在計算機網絡的學習中,不由得覺得這門課的零碎知識點異常之多,同時因為學習的課本是老外的教材——自頂向下方法,因此學習起來不免覺得吃力,但是從老外的教材里更能從一定高度理解計算機網絡的知識體系,也是樂在其中,同時做英語的習題感覺也很有趣味,從各方面來說可以說是獲益良多,認識了很多專業詞匯。節課之后,便想做一個簡單的端口掃描器,用的語言是java,因為實現界面很簡單,同時也有封裝好的Socket類可以使用,主要思路如下:

在主程序界面里輸入指定主機名或ip地址,按下start按鈕,就可以掃描主機的常用端口是否打開。內部設置了常用端口號:21, 22, 23, 25, 26, 69, 80, 110, 143,443, 465, 995, 1080, 1158,1433, 1521, 2100, 3128, 3306, 3389,7001, 8080, 8081, 9080, 9090, 43958。也可以自行修改。程序實現原理就是利用Java建立Socket去連接目標ip的指定端口,如果能連接上就證明該端口開放。反之,若在超時之前都沒有連接上,則該端口是關閉的,同時會產生異常。同時考慮到單線程操作效率較低,也利用了Java可以多線程編程的特點,使用了多線程掃描目標主機的一個端口是否開放,因此最終顯示結果中端口的排列順序是隨機的,且內部設定最多同時運行10個線程(可以根據實際情況更改)。

主要運用的網絡知識就是套接字的使用。以及java內部的List容器,java的界面設計,界面布局,以及簡單的泛型編程的用法。

主要代碼如下:

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;import java.net.UnknownHostException;import java.util.Arrays;import java.util.LinkedList;import java.util.List;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class ScanPort extends JFrame { /**  * 端口掃描啟動主程序  */ private static final long serialVersionUID = 1L; String str1 = " 常見端口有:"; String str2 = "ftp:21,22,telnet:23,smtp:25,http:80"; String str3 = "dns:53,tftp:69,snmp:161,162"; String str4 = "1158,1433,1521,2100,3128,26,69"; String str5 = "3306,3389,7001,8080,8081,110,143"; String str6 = "9080,9090,43958,443,465,995,1080"; JButton jb1 = new JButton("strat"); JTextArea jta = new JTextArea(); JScrollPane jsp = new JScrollPane(jta); JTextField jtf = new JTextField(17); String IP = "";//待掃描IP或域名 List <Integer>portList = new LinkedList<Integer>();// 定義一個List容器表示掃描的團口的List集合 Integer[] ports = new Integer[] { 21, 22, 23, 25, 26, 53,69, 80, 110, 143,   443,465,69,161,162,135,995,1080,1158,1433,1521,2100, 3128, 3306, 3389,   7001, 8080, 8081, 9080, 9090, 43958 ,135,445,1025,1026,1027,1028,1055,5357}; // 常見端口集合 public ScanPort() {  this.add(getPanel(), BorderLayout.SOUTH);  jsp.setBorder(BorderFactory.createEtchedBorder());  jsp.setBackground(Color.cyan);  this.add(jsp, BorderLayout.CENTER);  this.add(getPanel2(), BorderLayout.NORTH);  this.add(getPanel3(), BorderLayout.WEST);  this.setBounds(300, 60, 600, 600);  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  this.setTitle("ScanPort");  jta.setTabSize(4);  jta.setFont(new Font("標楷體", Font.BOLD, 16));  jta.setLineWrap(true);// 激活自動換行功能  jta.setWrapStyleWord(true);// 激活斷行不斷字功能  portList.addAll(Arrays.asList(ports));  //將ports中的值加入到set中,并去掉重復的  jb1.addActionListener(new ActionListener() {   @Override   public void actionPerformed(ActionEvent e) {    // TODO Auto-generated method stub    IP = jta.getText();    //ip為文本框內輸入的字符串    scanPorts(IP, portList, 10, 800);    //超時時間設定為800,線程數設定為10   }  });  this.setVisible(true); } /**  * 多線程掃描目標主機指定List端口集合的開放情況  *  * @param ip  *   待掃描IP或域名  * @param portList  *   待掃描的端口的List集合  * @param threadNumber  *   線程數  * @param timeout  *   連接超時時間  * */ public void scanPorts(String ip, List<Integer> portSet,int threadNumber, int timeout) {  ExecutorService threadPool = Executors.newCachedThreadPool();  //線程池  for (int i = 0; i < threadNumber; i++) {   //10個線程 加入到線程池里   ScanMethod scanMethod2 = new ScanMethod(ip, portSet,threadNumber, i, timeout);   threadPool.execute(scanMethod2);  }  threadPool.shutdown();  while (true) {   if (threadPool.isTerminated()) {    System.out.println("掃描結束");    break;   }   try {    Thread.sleep(1000);   } catch (InterruptedException e) {    e.printStackTrace();   }  }// end of while } /*  * 掃描方式:針對一個待掃描的端口的List集合進行掃描  */ private class ScanMethod implements Runnable {  private String ip; // 目標IP  private List<Integer> portList; // 待掃描的端口的List集合  private int threadNumber, serial, timeout; // 線程數,這是第幾個線程,超時時間  public ScanMethod(String ip, List<Integer> portList, int threadNumber,int serial, int timeout) {   this.ip = ip;   this.portList = portList;   this.threadNumber = threadNumber;   this.serial = serial;   this.timeout = timeout;  }  public void run() {   int port = 0;   Integer[] ports = portList.toArray(new Integer[portList.size()]); // List轉數組   try {    InetAddress address = InetAddress.getByName(ip); //如果輸入的是主機名,嘗試獲取ip地址    Socket socket;//定義套接字    SocketAddress socketAddress;//傳遞ip和端口    if (ports.length < 1)     //若數組沒有元素,返回,不執行     return;    for (port = 0 + serial; port <= ports.length - 1; port += threadNumber) {     //每次運行10個線程     socket = new Socket();     //為對象分配內存空間     socketAddress = new InetSocketAddress(address, ports[port]);     try {      socket.connect(socketAddress, timeout);      //對目標主機的指定端口進行連接,超時后連接失敗      socket.close();      //關閉端口      System.out.println("端口 " + ports[port] + " :開放");      jta.append("端口 " + ports[port] + " :開放/n");      //在文本區域里更新消息     } catch (IOException e) {      System.out.println("端口 " + ports[port] + " :關閉");      jta.append("端口 " + ports[port] + " :關閉/n");      //產生異常表示端口關閉     }    }   } catch (UnknownHostException e) {    e.printStackTrace();   }  }  //end of run() }//end of ScanMethod public JPanel getPanel() {  JPanel jp = new JPanel();  jp.add(jb1, BorderLayout.CENTER);  jp.setBorder(BorderFactory.createRaisedBevelBorder());  jp.setBackground(Color.lightGray);  return jp; } public JPanel getPanel2() {  JPanel jp = new JPanel();  JLabel jl = new JLabel();  jl.setText("請輸入主機名或ip地址,將掃描該主機的常見端口號:");  jp.add(jl);  jp.add(jtf);  jp.setBorder(BorderFactory.createRaisedBevelBorder());  jp.setBackground(Color.LIGHT_GRAY);  return jp; } public JPanel getPanel3() {  JLabel jl1 = new JLabel(str1);  JLabel jl2 = new JLabel(str2);  JLabel jl3 = new JLabel(str3);  JLabel jl4 = new JLabel(str4);  JLabel jl5 = new JLabel(str5);  JLabel jl6 = new JLabel(str6);  JPanel jp = new JPanel();  jp.setLayout(new GridLayout(6, 1));  jp.add(jl1);  jp.add(jl2);  jp.add(jl3);  jp.add(jl4);  jp.add(jl5);  jp.add(jl6);  jp.setBorder(BorderFactory.createEtchedBorder());  //蝕刻邊框  return jp; } public static void main(String[] args) {  new ScanPort(); }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美中文字幕| 91高清在线免费观看| 热久久免费视频精品| 在线观看成人黄色| 久久国产精品亚洲| 国产精品人人做人人爽| 日韩在线观看高清| 亚洲人成欧美中文字幕| 亚洲第一网站免费视频| 欧美日韩免费看| 中文一区二区视频| 日本韩国在线不卡| 精品国产91久久久久久老师| 色综合天天狠天天透天天伊人| 亚洲自拍高清视频网站| 国产精欧美一区二区三区| 国产一区二区动漫| 亚洲精品电影久久久| 国模叶桐国产精品一区| 国产精品久久久久久久久久三级| 午夜精品久久久久久久99热浪潮| 欧美大成色www永久网站婷| 国产精品久久久久久久天堂| 国产精品久久一区| 亚洲精品黄网在线观看| 亚洲成人av资源网| 国产亚洲精品久久久优势| 狠狠色香婷婷久久亚洲精品| 久久久精品国产网站| 日韩在线观看视频免费| 91欧美精品成人综合在线观看| 日韩精品免费看| 国产欧美日韩91| 国产欧美日韩亚洲精品| 久久免费视频网| 亚洲天天在线日亚洲洲精| 国内精品免费午夜毛片| 中文字幕视频一区二区在线有码| 日韩视频一区在线| 欧美日韩国产第一页| 国内精品小视频| 亚洲va久久久噜噜噜久久天堂| 午夜免费久久久久| 久久国产色av| 亚洲国产福利在线| 91视频国产高清| 57pao国产成人免费| 亚洲www视频| 日韩av在线免播放器| 夜夜嗨av色一区二区不卡| 亚洲午夜精品视频| 91精品视频在线| 国产精品一二三视频| 亚洲丁香婷深爱综合| 一个人www欧美| 欧美视频在线观看 亚洲欧| 一个人看的www欧美| 日日狠狠久久偷偷四色综合免费| 91沈先生作品| 久国内精品在线| 26uuu另类亚洲欧美日本老年| 国产经典一区二区| 欧美一级电影在线| 96精品视频在线| 国外视频精品毛片| 91免费视频网站| 欧美电影在线播放| 亚洲免费视频一区二区| 欧美在线一级视频| 日韩精品视频观看| 国产69久久精品成人| 国产精品日韩欧美大师| 亚洲精品久久久久久久久久久| 久久久综合免费视频| 亚洲国产日韩欧美在线图片| 国产69精品久久久久久| 亚洲激情国产精品| 欧美日韩国产二区| 国产精品久久久久福利| 日韩精品在线免费观看视频| 日韩精品在线观看网站| 欧美性受xxxx黑人猛交| 亚洲国产精品免费| 国产极品jizzhd欧美| 欧美中文字幕在线视频| 亚洲黄页视频免费观看| 国产精彩精品视频| 欧美富婆性猛交| 欧美成人中文字幕| 国产在线不卡精品| 欧美午夜精品久久久久久人妖| 91亚洲国产成人久久精品网站| 欧美成人免费观看| 九九热精品在线| 亚洲精品一区二区三区不| 91精品国产91| 亚洲第一av网站| 国产精品久久久久av| 欧美在线性爱视频| 俺也去精品视频在线观看| 一区二区三区www| 精品久久久久久久久久| 国产在线视频91| 国产噜噜噜噜久久久久久久久| 日韩国产一区三区| 国产91精品黑色丝袜高跟鞋| 性欧美亚洲xxxx乳在线观看| 久久免费视频观看| 亚洲欧美一区二区三区在线| 亚洲第一免费网站| 51色欧美片视频在线观看| 日韩精品高清视频| 黄色一区二区在线| 精品成人69xx.xyz| 91精品久久久久久久久中文字幕| 97国产精品视频人人做人人爱| 欧美日韩国产麻豆| 欧美男插女视频| 欧美自拍视频在线| 97视频在线播放| 欧美精品在线免费播放| 日韩欧美中文字幕在线播放| 亚洲人成网7777777国产| 欧美在线观看网址综合| 国产91精品不卡视频| 久久精品亚洲94久久精品| 亚洲最新在线视频| 亚洲已满18点击进入在线看片| 国产一区二区视频在线观看| 2021久久精品国产99国产精品| 国产视频久久网| 丝袜美腿精品国产二区| 日本一区二区三区在线播放| 欧美综合在线第二页| 精品亚洲夜色av98在线观看| 国产精品白丝av嫩草影院| 国产成人欧美在线观看| 欧美综合一区第一页| 成人黄色av网站| 亚洲国产精品成人av| 亚洲女在线观看| 欧美日韩久久久久| 日本久久久久久| 欧美人与物videos| 国产一区二区在线免费| 亚洲精品久久久一区二区三区| 久久久久久成人精品| 韩国欧美亚洲国产| 国产欧美精品xxxx另类| 日韩av电影手机在线| 成人免费在线视频网址| 538国产精品视频一区二区| 国产suv精品一区二区| 国产精彩精品视频| 国产精品视频白浆免费视频| 国产精品欧美久久久| 久久av在线看| 精品国产乱码久久久久久天美| 国产美女精品视频免费观看| 少妇高潮 亚洲精品| 高清欧美性猛交| 亚洲天堂影视av| 97涩涩爰在线观看亚洲| 国产精品专区第二|