一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java網絡編程實現的簡單端口掃描器示例

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

2021-04-23 11:19wangbowj123 Java教程

這篇文章主要介紹了Java網絡編程實現的簡單端口掃描器,涉及Java網絡編程Socket組建、swing組建及多線程相關操作技巧,需要的朋友可以參考下

本文實例講述了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的界面設計,界面布局,以及簡單的泛型編程的用法。

主要代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
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程序設計有所幫助。

原文鏈接:https://blog.csdn.net/wangbowj123/article/details/76473065

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜福利试看120秒体验区 | tube69xxxxhd日本 | 逼逼爱| 亚洲色图欧美视频 | 99精品视频一区在线观看miya | 喷潮女王cytherea全部视频 | 校园全黄h全肉细节文 | 国产日本韩国不卡在线视频 | 91混血大战上海双胞胎 | 波多野结衣中文字幕乱七八糟 | 乌克兰一级片 | 国内精品一区二区在线观看 | 3d动漫h在线观看网站蜜芽 | 男人懂得网站 | 99久久国产综合精品网成人影院 | 夫妇野外交换激情 | 91尤物在线视频 | 欧美xxoo做爰猛烈视频 | 欧美白虎逼 | 国产午夜视频在线观看网站 | 99精品国产成人一区二区 | 啊好痛嗯轻一点免费 | 3d欧美人禽交| 国产亚洲精品美女久久久 | 久久婷婷五月综合色丁香 | 好深快点再快点好爽视频 | 国产精品久久久天天影视香蕉 | 亚洲成人黄色网址 | 欧美另类亚洲 | 高清免费毛片 | 成年人免费看的视频 | 国产免费小视频在线观看 | 免费观看毛片视频 | 免费观看国产精品 | 福利色播| 色综合色狠狠天天综合色hd | 91禁漫| kuaibo成人播放器 | 色综合中文字幕在线亚洲 | 成人二区| 风间由美在线播放 |