Artikel ini menjelaskan pemindai port sederhana yang diimplementasikan oleh pemrograman Java Network. Bagikan untuk referensi Anda, sebagai berikut:
Dalam studi jaringan komputer, saya tidak dapat membantu tetapi merasa bahwa ada banyak poin pengetahuan yang terpisah dalam kursus ini. Pada saat yang sama, karena buku teks yang saya pelajari adalah buku teks orang asing - metode top -down , sulit untuk dipelajari. Namun, dari buku teks asing, saya dapat memahami sistem pengetahuan jaringan komputer dari tingkat tertentu, dan saya menikmatinya. Pada saat yang sama, melakukan latihan bahasa Inggris juga sangat menarik. Dari semua aspek, saya dapat mengatakan bahwa saya telah banyak mendapat manfaat dan belajar banyak kosa kata profesional. Setelah kelas, saya ingin membuat pemindai port sederhana, yang digunakan di Java, karena antarmuka implementasi sangat sederhana, dan ada juga kelas soket yang dienkapsulasi yang dapat digunakan. Ide utamanya adalah sebagai berikut:
Masukkan nama host atau alamat IP yang ditentukan di antarmuka program utama, tekan tombol mulai untuk memindai apakah port host yang umum digunakan terbuka. Nomor port umum ditetapkan secara internal: 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, 909, 909, 9090, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9080, 9090, Prinsip implementasi program adalah menggunakan Java untuk membuat soket untuk terhubung ke port yang ditentukan dari IP target. Jika dapat dihubungkan, itu membuktikan bahwa port terbuka. Sebaliknya, jika tidak ada koneksi sebelum batas waktu, port ditutup dan pengecualian akan terjadi. Pada saat yang sama, mengingat rendahnya efisiensi operasi utamanya tunggal, ini juga memanfaatkan pemrograman multi-utas Java, dan menggunakan pemindaian multi-threaded apakah satu port host target terbuka. Oleh karena itu, hasil tampilan akhir diacak, dan pengaturan internal adalah hingga 10 utas dapat dijalankan pada saat yang sama (dapat diubah sesuai dengan situasi aktual).
Pengetahuan jaringan utama yang digunakan adalah penggunaan soket. Serta daftar wadah di dalam Java, desain antarmuka java, tata letak antarmuka, dan penggunaan pemrograman generik sederhana.
Kode utamanya adalah sebagai berikut:
impor java.awt.borderlayout; impor java.awt.color; impor java.awt.font; impor java.awt.gridlayout; java.net.inetsocketaddress; import java.net.socketaddress; impor java.net.unknownhostexception; impor java.util.arrays; impor java.util.linkedlist; impor java.util.list; impor java.util.concurrent; java.util.concurrent.Executors; impor javax.swing.borderfactory; import javax.swing.jbutton; impor javax.swing.jframe; impor javax.swing.jlabel; impor javax.swing.jpanel; impor javax.swing.jscrollprolprollpan; javax.swing.jtextfield; scanport kelas publik memperluas jframe { / *** port scan memulai program utama* / private static final long serialversionuid = 1l; String str1 = "Port umum adalah:"; 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 = jbutton baru ("strat"); JTextArea jta = new jTextArea (); Jscrollpane jsp = jscrollpane baru (jta); JTextField JTF = JTextfield baru (17); String ip = ""; // IP atau nama domain yang akan dipindai <Integer> portlist = new LinkedList <Integer> (); // Tentukan wadah daftar yang mewakili port cluster port yang dipindai [] port = bilangan bulat baru [] {21, 22, 23, 25, 26, 53, 80, 110, 110, 110, 14, 14, 14, 14, 14, 23, 23, 23, 23, 23, 22, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 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}; // Common Port Collection 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 (font baru ("QuickKaiti", Font.Bold, 16)); jta.setlinewrap (true); // Aktifkan fungsi bungkus garis otomatis jta.setwrapstyleWord (true); // Aktifkan fungsi kata portlist.addall (arrays.aslist (port)); // Tambahkan nilai dalam port untuk mengatur dan menghapus duplikat jb1.addactionListener (actionListener baru () {@Override public void actionPerformed (ActionEvent e) {// TODO Metode yang dihasilkan secara otomatis SCANTPORTS (IP, IP, 800, dan IP adalah string yang dimasukkan dalam kotak teks Scanports (IP, 800, 800, IP, 800, IP, 800, dan IP adalah string yang dimasukkan dalam kotak teks (), IP, 800, IP, 800, dan IP. Jumlah utas diatur ke 10}}); this.setVisible (true); } / ** * Pembukaan koleksi port daftar yang ditentukan untuk host target pemindaian multithreaded * * @param ip * ip atau nama domain yang akan dipindai * @param portlist * Daftar port port yang akan dipindai * @param threadnumber * Jumlah Threads * @param timeout * Koneksi Timeout * / public void scanports (string ip, string ip, daftar {string iP, daftar {string {daftar {portsset> port {string {string {daftar public {string, string, string {string, string, string, string {string {string, string {string {string {string, daftar port threadpool = executors.newcachedthreadpool (); // threadpool untuk (int i = 0; i <threadNumber; i ++) {// 10 utas ditambahkan ke scanMethod scanMethod2 = scanMethod baru (IP, portset, threadNumber, i, timeout); threadpool.execute (scanmethod2); } threadpool.shutdown (); while (true) {if (threadpool.isterMinated ()) {System.out.println ("scan end"); merusak; } coba {thread.sleep (1000); } catch (InterruptedException e) {E.PrintStackTrace (); }} // akhir while}/** Metode pemindaian: Pindai untuk daftar kumpulan port yang akan dipindai*/ private class scanMethod mengimplementasikan runnable {private string ip; // Target IP Private List <Integer> PortList; // Daftar koleksi port yang akan dipindai int threadnumber pribadi, serial, batas waktu; // Jumlah utas, utas mana adalah jumlah utas, batas waktu scanmethod publik (string ip, daftar <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 [] port = portlist.toArray (integer baru [portlist.size ()]); // Daftar ke array coba {inetaddress alamat = inetaddress.getByName (ip); // Jika Anda memasukkan nama host, cobalah untuk mendapatkan soket alamat IP; // tentukan socket socketaddress socketaddress; // lewati ip dan port jika (ports.length <1) // jika array tidak memiliki elemen, pengembalian tidak akan dijalankan; untuk (port = 0 + serial; port <= ports.length - 1; port + = threadNumber) {// 10 utas dijalankan setiap kali soket = soket baru (); // Alokasikan ruang memori untuk objek socketAddress = inetsocketAddress baru (alamat, port [port]); coba {socket.connect (socketaddress, timeout); // Sambungkan port yang ditentukan dari host target, dan koneksi gagal setelah soket timeout.close (); // Tutup port system.out.println ("port" + port [port] + ": buka"); jta.append ("port" + port [port] + ": buka /n"); // Perbarui pesan di area teks} catch (ioException e) {System.out.println ("port" + port [port] + ": tutup"); jta.append ("port" + port [port] + ": tutup /n"); // Pengecualian dihasilkan untuk menunjukkan bahwa port ditutup}}} catch (unknownHostException e) {e.printstacktrace (); }} // akhir run ()} // akhir scanmethod public jpanel getPanel () {jpanel jp = new jpanel (); jp.add (jb1, borderlayout.center); jp.setborder (borderfactory.createraiedbevelborder ()); JP.SetBackground (Color.LightGray); mengembalikan jp; } public jpanel getPanel2 () {jpanel jp = new jpanel (); Jlabel JL = new jlabel (); jl.setText ("Harap masukkan nama host atau alamat IP, dan nomor port umum host akan dipindai:"); JP.Add (JL); JP.Add (JTF); jp.setborder (borderfactory.createraiedbevelborder ()); jp.setBackground (color.light_gray); mengembalikan jp; } public jpanel getPanel3 () {jlabel jl1 = new jlabel (str1); Jlabel JL2 = JLabel baru (str2); Jlabel JL3 = JLabel baru (str3); Jlabel JL4 = JLabel baru (str4); Jlabel JL5 = JLabel baru (str5); Jlabel JL6 = JLabel baru (str6); Jpanel jp = jpanel baru (); jp.setlayout (GridLayout baru (6, 1)); jp.add (jl1); jp.add (jl2); jp.add (jl3); jp.add (jl4); jp.add (jl5); jp.add (jl6); jp.setborder (borderfactory.createetchedborder ()); // etsa perbatasan kembali JP; } public static void main (string [] args) {new scanport (); }}Untuk informasi lebih lanjut tentang konten terkait Java, silakan periksa topik -topik situs ini: "Ringkasan Keterampilan Pemrograman Jaringan Java", "Ringkasan Keterampilan Pemrograman Soket Java", "Ringkasan File Java dan Keterampilan Operasi Direktori", "Tutorial tentang Struktur Data Java dan Algorithme", Ringkasan Keterampilan Operasi JAVA "Ringkasan JAVA" Ringkasan JAVA "Ringkasan Operasi Java Ringkasan" Ringkasan Operasi Java Ringkasan "
Saya harap artikel ini akan membantu pemrograman Java semua orang.