この記事では、Java Networkプログラミングによって実装されたシンプルなポートスキャナーについて説明します。次のように、参照のために共有してください。
コンピューターネットワークの研究では、このコースには多くの断片的な知識ポイントがあると感じずにはいられません。同時に、私が勉強した教科書は外国人の教科書であるため、トップダウンの方法であるため、学ぶことは困難です。しかし、外国人の教科書から、私は特定のレベルのコンピューターネットワークの知識システムを理解することができ、それを楽しんでいます。同時に、英語のエクササイズを行うことも非常に興味深いものです。あらゆる面から、私は多くの利益を得て、多くの専門的な語彙を学んだと言えます。クラスの後、実装インターフェイスは非常にシンプルで、使用できるカプセル化されたソケットクラスもあるため、Javaで使用されたシンプルなポートスキャナーを作成したかったのです。主なアイデアは次のとおりです。
メインプログラムインターフェイスに指定されたホスト名またはIPアドレスを入力し、スタートボタンを押して、ホストの一般的に使用されるポートが開いているかどうかをスキャンします。一般的なポート番号は内部的に設定されています: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を使用してソケットを確立して、ターゲットIPの指定されたポートに接続することです。接続できる場合、ポートが開いていることを証明します。それどころか、タイムアウトの前に接続がない場合、ポートは閉じられ、例外が発生します。同時に、単一スレッド操作の効率が低いことを考慮すると、Javaのマルチスレッドプログラミングも利用し、ターゲットホストの1つのポートが開いているかどうかにかかわらず、マルチスレッドスキャンを使用します。したがって、最終的な表示結果はランダム化され、内部設定は、最大10個のスレッドを同時に実行できることです(実際の状況に応じて変更できます)。
使用される主なネットワークの知識は、ソケットの使用です。また、Java内のコンテナをリスト、Javaインターフェイスデザイン、インターフェイスレイアウト、およびシンプルな汎用プログラミングの使用法をリストします。
メインコードは次のとおりです。
java.awt.borderlayout; Import java.awt.color; import java.awt.font; Import java.awt.gridlayout; Import java.awt.event.actionevent; Import java.awt.event.event.actionlistener; Import Java.ioEcseption; Import Java.net.InetDiss java.net.inetsocketAddress; Import java.net.socketAddress; Import java.net.unknownhostexception; Import java.util.arrays; Import java.util.linkedlist; Import java.util.list; import java.util.current.cecutorrent.uter.util.cutorserrent.cutorerrent.cutorerrent.cutorrent.cutorrent 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.swing.swing.swing.swing.swing.swing.javax。 / ***ポートスキャンはメインプログラムを開始します* / 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);文字列IP = ""; //スキャンされるIPまたはドメイン名<Integer>ポートリスト= new LinkedList <Integer>(); //スキャンされたクラスターポート整数を表すリストコンテナ[] {] {21、22、23、25、26、53,69、80、110、143、443、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( "Quickkaiti"、font.bold、16)); jta.setlineWrap(true); //自動ラインラップ関数Jta.setWrapStyleword(true); //ラインブレイクワードfunction portlist.addall(arrays.aslist(ports))をアクティブ化する; //ポートに値を追加して、重複したJB1.AddActionListener(new ActionListener(){@Override Public Void ActionPerformed(ActionEvent E){// Todo auto-formented methood stub = jta.getText(); // IPはテキストボックスScanportsに入力された文字列です。 800、スレッドの数は10}}); this.setVisible(true); } / ** *マルチスレッドスキャンターゲットホスト用の指定されたリストポートコレクションのオープニング * * @param ip *スキャンされるドメイン名 * @paramポートリスト *スキャンされるポートのリスト * @paramスレッドナンバー * @param Timeout * Connection Timeout * * / public void scanports(inte inte wid> inte inte swoots executorservice threadpool = executors.newcachedthreadpool(); //(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.istrimated()){system.out.println( "scan end");壊す; } try {thread.sleep(1000); } catch(arturnedexception e){e.printstacktrace(); }} // whileの終わり}/**スキャン方法:スキャンするポートのリストコレクションをスキャン*/プライベートクラススキャンメトッドは、runnable {private string ip; //ターゲットIPプライベートリスト<Integer> Portlist; //スキャンされるポートのコレクションをリストするプライベートINTスレッドナンバー、シリアル、タイムアウト。 //スレッドの数、スレッドはスレッドの数、タイムアウトパブリックスキャンメソッド(String IP、List <Integer>ポートリスト、intスレッドナンバー、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()]); //配列へのリスト{inetAddressアドレス= inetAddress.getByName(IP); //ホスト名を入力する場合は、IPアドレスソケットソケットを取得してみてください。 for(port = 0 + serial; port <= ports.length -1; port + = threadnumber){// 10スレッドが毎回実行されますsocket = new Socket(); //オブジェクトSocketAddressのメモリスペースを割り当てる= new inetsocketAddress(アドレス、ポート[ポート]); try {socket.connect(socketaddress、timeout); //ターゲットホストの指定されたポートを接続すると、タイムアウトsocket.close()の後に接続が失敗します。 //ポートシステムを閉じる。 jta.append( "port" + ports [port] + ":open /n"); //テキスト領域でメッセージを更新} catch(ioException e){system.out.println( "port" + ports [port] + ":close"); jta.append( "port" + ports [port] + ":close /n"); //例外は、ポートが閉じられていることを示すように生成されます}}} catch(unknownhostexception e){e.printstacktrace(); }} // run()} // scanmethod public jpanel getpanel(){jpanel jp = new jpanel(); jp.add(jb1、borderlayout.center); jp.setborder(borderfactory.createraidedbevelborder()); jp.setbackground(color.lightgray); jpを返します。 } public jpanel getPanel2(){jPanel jp = new jPanel(); jlabel jl = new Jlabel(); jl.settext( "ホスト名またはIPアドレスを入力してください。ホストの共通ポート番号がスキャンされます:"); jp.add(jl); jp.add(jtf); jp.setborder(borderfactory.createraidedbevelborder()); jp.setbackground(color.light_gray); 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()); //ボーダーリターンJPをエッチングします。 } public static void main(string [] args){new scanport(); }}Java関連のコンテンツの詳細については、このサイトのトピックをご覧ください:「Javaネットワークプログラミングスキルの要約」、「Javaソケットプログラミングスキルの概要」、「Javaファイルとディレクトリ操作スキルの概要」、Javaデータ構造とアルゴリズムに関するチュートリアル」、「Java Operation dom Node operince opertions "summary opers of oper opering" opering opers of "summary" summary of "summary of Java
この記事がみんなのJavaプログラミングに役立つことを願っています。