В этой статье описывается простой сканер порта, реализованный Java Network Programming. Поделитесь этим для вашей ссылки, следующим образом:
При изучении компьютерных сетей я не могу не чувствовать, что в этом курсе есть много фрагментарных знаний. В то же время, поскольку учебники, которые я изучал, являются учебниками иностранцев - метод сверху вниз , его трудно выучить. Однако из учебников иностранцев я могу понять систему знаний компьютерных сетей с определенного уровня, и мне это нравится. В то же время, выполнение английских упражнений также очень интересно. Из всех аспектов я могу сказать, что я очень принесет пользу и узнал много профессионального словарного запаса. После класса я хотел сделать простой сканер порта, который использовался в 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 и использует многопоточное сканирование, открыт ли один порт целевого хоста. Следовательно, окончательный результат отображения рандомизирован, и внутренняя настройка заключается в том, что до 10 потоков можно запустить одновременно (его можно изменить в соответствии с фактической ситуацией).
Основные знания сети, используемые, - это использование сокетов. А также перечислять контейнеры в Java, дизайн интерфейса Java, макет интерфейса и использование простого общего программирования.
Основной код заключается в следующем:
Импорт java.awt.borderlayout; import java.awt.color; import java.awt.font; import java.awt.gridlayout; импорт java.awt.event.actionevent; импорт java.awt.event.actionlistener; импорт java.io.ioexception; import java.net.inetdress; java.net.inetsocketAddress; импорт java.net.socketAddress; импорт java.net.unknownhostexception; импорт java.util.arrays; импорт java.util.linkedlist; импорт java.util.list; импорт java.util.concurrent.executorserv; javax.swing.borderfactory; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; импорт javax.swing.jpanel; импорт javax.swing.jscrollpane; импорт javax.sling.jtextare * Сканирование порта запускает основную программу */ частная статическая конечная длинная длинная серийная сериала = 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 или доменного домена, которое должно быть сканировано <Integer> portlist = new LinkedList <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}; // 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 (новый шрифт ("Quickkaiti", font.bold, 16)); jta.setlinewrap (true); // активировать функцию автоматической строки wrap jta.setwrapstyleword (true); // активировать линии функцию Word Portlist.addall (arrays.aslist (ports)); // Добавить значение в портах, чтобы установить и удалить дубликат jb1.addactionListener (new ActionListener () {@Override public void actionperformed (actionevent e) {// todo автоматически генерируемый метод ip = jta.getText (); // ip-это строка, введенная в текстовый порядок scanports (ip, portlist, 1000); потоки установлены на 10}}); this.setvisible (true); } /** * Opening of the specified List port collection for multithreaded scanning target host* * @param ip * IP or domain name to be scanned* @param portList * List collection of ports to be scanned* @param threadNumber * Number of threads* @param timeout * Connection timeout* */ public void scanPorts(String ip, List<Integer> portSet,int threadNumber, int timeout) { ExecutorService threadpool = executors.newcachedthreadpool (); // ThreadPool для (int i = 0; i <threadnumber; i ++) {// 10 потоков добавляются в сканированную сканированную сканирующую плату за потоки 2 = новый ScanMethod (IP, Portset, Threadnumber, I, Timeout); threadpool.execute (scanmethod2); } threadpool.shutdown (); while (true) {if (threadpool.istermination ()) {System.out.println ("end Scan"); перерыв; } try {thread.sleep (1000); } catch (прерванное искусство e) {e.printstacktrace (); }} // end of while}/** Метод сканирования: сканирование для сканирования списков портов для сканирования*/ Частный класс Scanmethod реализует runnable {private String ip; // Target IP Private List <Integer> Portlist; // Сборные списки портов для отсканирования частного int threadnumber, serial, timeout; // количество потоков, какое поток - это количество потоков, 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.imeout = timeout; } public void run () {int port = 0; Integer [] ports = portlist.toarray (new Integer [portlist.size ()]); // список в массиве try {inetAddress address = inetAddress.getbyname (ip); // Если вы введите имя хоста, попробуйте получить сокет IP -адреса сокета; // определить сокет сокетаддресс SocketAddress; // пройти IP и порт, если (порты. for (port = 0 + serial; порт <= порты. // выделять пространство памяти для объекта SocketAddress = new InetSocketAddress (адрес, порты [порт]); try {socket.connect (socketAddress, timeout); // Подключите указанный порт целевого хоста, а подключение не удается после Timeout Socket.close (); // ЗАКРЫТЬ СИСТЕМУ ПОРТА.OUT.PRINTLN ("порт" + порты [порт] + ": open"); jta.append ("порт" + порты [порт] + ": open /n"); // Обновление сообщения в текстовой области} catch (ioException e) {System.out.println ("port" + ports [port] + ": close"); jta.append ("порт" + порты [порт] + ": close /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); вернуть 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); вернуть 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 (); }}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"
Я надеюсь, что эта статья будет полезна для всех Java Programming.