Dieser Artikel beschreibt einen einfachen Port -Scanner, der von der Java -Netzwerkprogrammierung implementiert wird. Teilen Sie es für Ihre Referenz wie folgt weiter:
Bei der Untersuchung von Computernetzwerken kann ich nicht anders, als zu der Meinung, dass es in diesem Kurs viele fragmentarische Wissenspunkte gibt. Gleichzeitig ist es schwierig zu lernen, dass die Lehrbücher, die ich studierte, Ausländer Lehrbücher sind - die Top -Down -Methode . Aus den Lehrbüchern der Ausländer kann ich jedoch das Wissenssystem von Computernetzwerken aus einer bestimmten Ebene verstehen, und ich genieße es. Gleichzeitig ist auch sehr interessant, englische Übungen zu machen. Aus allen Aspekten kann ich sagen, dass ich viel profitiert und viel professionelles Vokabular gelernt habe. Nach der Klasse wollte ich einen einfachen Port -Scanner erstellen, der in Java verwendet wurde, da die Implementierungsschnittstelle sehr einfach ist und auch eingekapselte Sockelklassen verwendet werden können. Die Hauptideen sind wie folgt:
Geben Sie den angegebenen Hostnamen oder die IP -Adresse in der Hauptprogrammschnittstelle ein. Drücken Sie die Starttaste, um zu scannen, ob der häufig verwendete Port des Hosts geöffnet ist. Häufige Portnummern sind intern eingestellt: 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. Das Prinzip der Programmimplementierung besteht darin, Java zu verwenden, um Socket zu etablieren, um eine Verbindung zum angegebenen Port der Ziel -IP herzustellen. Wenn es angeschlossen werden kann, beweist es, dass der Port geöffnet ist. Im Gegenteil, wenn vor der Auszeit keine Verbindung vorhanden ist, ist der Port geschlossen und eine Ausnahme tritt auf. Gleichzeitig nutzt es unter Berücksichtigung der geringen Effizienz des Einfach-Thread-Betriebs auch die Multi-Thread-Programmierung von Java und nutzt das Multi-Thread-Scannen, ob ein Port des Zielhosts geöffnet ist. Daher ist das endgültige Anzeigeergebnis randomisiert, und die interne Einstellung besteht darin, dass bis zu 10 Threads gleichzeitig ausgeführt werden können (es kann gemäß der tatsächlichen Situation geändert werden).
Das Hauptkenntnis der Hauptnetzwerke ist die Verwendung von Steckdosen. Neben Containern in Java, Java -Schnittstellendesign, Schnittstellenlayout und Verwendung einfacher generischer Programmierung.
Der Hauptcode lautet wie folgt:
Import Java.awt.BorderLayout; Import Java.awt.Color; Import Java.awt.font; Import Java.awt.GridLayout; Import Java.awt.event.ActionEvent; importieren java.awt.event.ActionListener; java.net.inetsocketaddress; import java.net.socketaddress; import java.net.unnownhostexception; import Java.util.arrays; java.util.linkedlist; javax.swing.borderfactory; import javax.swing.jbutton; import Javax.swing.jframe; import Javax.swing.jlabel; Javax.swing.jpanel import Javax.swing.jscrollpane; Import Javax.Swing.Jtextarea; / *** Port -Scan startet das Hauptprogramm* / private statische endgültige lange Serialversionuid = 1L; String str1 = "Gemeinsame Ports sind:"; 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 = ""; // Der IP- oder Domain -Name zu scannt <Integer> portlist = new LinkedList <Gefeger> (); // Definieren Sie einen Listencontainer, der den gescannten Cluster -Port -Integer [] Ports = New Integer [] {21, 22, 23, 25, 26, 53,69, 80, 80, 110, 443, 443, 443, darstellen 465,69,161,162,135,995,1080,1158,1433,1521,2100, 3128, 3306, 3389, 7001, 8080, 8081, 9080, 9090, 439588 , 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 (neue Schriftart ("Quickkaiti", Font.bold, 16)); jta.setLineWrap (true); // Aktivieren Sie die automatische Zeilenwrap-Funktion jta.setwrapStyleword (true); // Aktivieren Sie die Line-Breaking Word-Funktion portlist.addall (arrays.aslist (ports)); // Fügen Sie den Wert in Ports hinzu, um das doppelte jb1.addactionListener (new ActionListener () {@Override public void actionperformes (actionEvent e) {// Todo automatisch generierte Methoden-Stub IP = JTA.GETTEXT (); // IP IP IP IP IP IP IP IP IP IP IP IP IP IS THE STING ENTED-TIMMENDE MIT ANGEBOTEN AND-TIMMEN-SEITEN, ATRECTS-SETS, STORTS (IP) (PORTLIST, 10, 800), 800). Die Anzahl der Threads ist auf 10}}); this.setvisible (true); } / ** * Öffnen der angegebenen Listen -Port -Sammlung für Multithread -Scan -Ziel -Host * * @param IP * IP oder Domänenname zu scannen threadpool = Executors.NewCachedThreadpool (); // Threadpool für (int i = 0; i <ThreadNumber; i ++) {// 10 Threads werden zum Thread Pool scanMethod scanMethod2 = neu scanMethod (IP, Portset, ThreadNumber, I, Timeout) hinzugefügt. threadpool.execute (scanMethod2); } threadpool.shutdown (); while (true) {if (threadpool.isterMination ()) {System.out.println ("Scan End"); brechen; } try {thread.sleep (1000); } catch (interruptedException e) {e.printstacktrace (); }} // Ende von}/** Scan -Methode: Scannen Sie eine Listensammlung von Ports, die gescannt werden sollen // Target IP Private List <Ganzzahl> Portliste; // Auflistung der Sammlung von Ports, die private int threadNumber, seriell, timeout gescannt werden sollen; // Anzahl der Threads, in welchem Thread die Anzahl der Threads, Timeout public scanMethod (String IP, Liste <Integer> Portliste, int Threvumber, int serielle, 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 to Array try {inetaddress address = inetaddress.getByName (IP); // Wenn Sie den Hostnamen eingeben, versuchen Sie, den IP -Adress -Socket -Socket zu erhalten. for (port = 0 + serial; port <= ports.length - 1; port + = threadNumber) {// 10 Threads werden jedes Mal ausführen, softige Socket (); // Speicherplatz für die Objekt -SocketAddress = new InetSocketaddress (Adresse, Ports [Port]) zuweisen; try {socket.connect (SocketAddress, Timeout); // Verbinden Sie den angegebenen Port des Zielhosts, und die Verbindung schlägt nach dem Zeitüberschreitungssocket () aus. // Schließen Sie das Port system.out.println ("port" + ports [port] + ": open"); jta.Append ("port" + ports [port] + ": open /n"); // Die Nachricht im Textbereich aktualisieren} catch (ioException e) {System.out.println ("port" + ports [port] + ": close"); jta.Append ("port" + ports [port] + ": close /n"); // Die Ausnahme wird generiert, um anzuzeigen, dass der Port geschlossen ist. }} // Ende von run ()} // Ende von ScanMethod public JPanel getPanel () {jpanel jp = new jpanel (); JP.ADD (JB1, BorderLayout.Center); JP.SetBorder (borderFactory.CreateurizedBevelBorder ()); JP.SetBackground (color.lightgray); Rückkehr JP; } public JPanel getPanel2 () {jpanel jp = new jpanel (); JLabel JL = new JLabel (); jl.setText ("Bitte geben Sie den Hostnamen oder die IP -Adresse ein, und die gemeinsame Portnummer des Hosts wird gescannt:"); jp.add (jl); jp.add (jtf); JP.SetBorder (borderFactory.CreateurizedBevelBorder ()); JP.SetBackground (color.light_gray); Rückkehr 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 (neuer 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 ()); // Grenze return JP; } public static void main (String [] args) {new Scanport (); }}For more information about Java related content, please check out the topics of this site: "Summary of Java Network Programming Skills", "Summary of Java Socket Programming Skills", "Summary of Java File and Directory Operation Skills", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.