تصف هذه المقالة ماسح ضوئي بسيط للمنفذ تنفذه برمجة شبكة Java. شاركه للرجوع إليه ، على النحو التالي:
في دراسة شبكات الكمبيوتر ، لا يسعني إلا أن أشعر أن هناك العديد من نقاط المعرفة المجزأة في هذه الدورة. في الوقت نفسه ، لأن الكتب المدرسية التي درستها هي الكتب المدرسية للأجانب - الطريقة من أعلى إلى أسفل ، من الصعب التعلم. ومع ذلك ، من الكتب المدرسية للأجانب ، يمكنني أن أفهم نظام المعرفة لشبكات الكمبيوتر من مستوى معين ، وأنا أستمتع به. في الوقت نفسه ، يعد القيام بتمارين باللغة الإنجليزية أمرًا مثيرًا للاهتمام للغاية. من جميع الجوانب ، أستطيع أن أقول إنني استفدت كثيرًا وتعلمت الكثير من المفردات المهنية. بعد الفصل ، أردت إنشاء ماسح ضوئي بسيط للمنفذ ، والذي تم استخدامه في 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 ؛ استيراد java.awt.font java.net.inetsocketaddress ؛ استيراد java.net.socketaddress ؛ استيراد java.net.unknownhostexception ؛ استيراد java.util.arrays ؛ java.util.linkedList ؛ import java.util.list ؛ javax.swing.borderfactory ؛ استيراد javax.swing.jbutton ؛ استيراد javax.swing.jframe ؛ استيراد javax.swing.jlabel ؛ استيراد javax.swing.jpanel ؛ استيراد javax.swing.jscrollpan / *** يبدأ المسح الضوئي للمنفذ في البرنامج الرئيسي* / 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 أو اسم المجال المراد مسحه <integer> portlist = new LinkedList <integer> () ؛ // تحديد حاوية قائمة تمثل عدد المنافذ المنفذ الكتلة الممسوحة ضوئيًا []] 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) ؛ // تنشيط وظيفة التفاف التلقائي jta.setwrapstyleword (true) ؛ // تنشيط وظيفة portlist.addall (Arrays.Aslist (المنافذ)) ؛ // أضف القيمة في المنافذ لتعيين وإزالة jb1.addActionListener (new ActionListener () {Override public void ActionPerformed (ActionEvent e) {// tode todo method method method ، 10 ، 800) ؛ تم تعيينه على 10}}) ؛ this.setVisible (صحيح) ؛ ستر Executors.NewCachedThreadPool () ؛ // threadpool لـ (int i = 0 ؛ i <threadnumber ؛ i ++) {// 10 مؤشرات الترابط إلى مجموعة مؤشرات الترابط scanmethod2 = new scanmethod (IP ، portset ، threadnumber ، i ، timeout) ؛ threadpool.execute (ScanMethod2) ؛ } threadpool.shutdown () ؛ بينما (صحيح) {if (threadpool.isterminated ()) {system.out.println ("Scan end") ؛ استراحة؛ } جرب {thread.sleep (1000) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ }} // End of ther end}/** method method: مسح لمجموعة قائمة من المنافذ المراد مسحها*/ private class scanmethod تقوم بتنفيذ Runnable {private string ip ؛ // Target IP List <integer> portlist ؛ // مجموعة قائمة من المنافذ المراد ضوئيًا للمتأشرين ، المسلسل ، المهلة ؛ . this.portlist = portlist ؛ this.throadnumber = threadnumber ؛ this.serial = التسلسلي ؛ this.timeout = timeout ؛ } public void run () {int port = 0 ؛ integer [] ports = portlist.toarray (integer new [portlist.size ()]) ؛ // list to array try {inetaddress address = inetaddress.getByName (IP) ؛ // إذا قمت بإدخال اسم المضيف ، فحاول الحصول على مقبس مقبس عنوان IP ؛ // تحديد SocketAddress Socketaddress ؛ // Pass IP ومنفذ if (ports.length <1) // إذا لم يكن لدى الصفيف عناصر ، فلن يتم تنفيذ العودة ؛ لـ (port = 0 + serial ؛ port <= ports.length - 1 ؛ port + = threadnumber) {// 10 threads تشغيل في كل مرة socket = new Socket () ؛ // تخصيص مساحة الذاكرة لمقبس الكائن = new inetsocketaddress (العنوان ، المنافذ [المنفذ]) ؛ حاول {socket.connect (SocketAddress ، timeout) ؛ // قم بتوصيل المنفذ المحدد للمضيف الهدف ، وفشل الاتصال بعد مهلة Socket.Close () ؛ // أغلق المنفذ system.out.println ("المنفذ" + المنافذ [المنفذ] + ": open") ؛ 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 () ؛ }} // نهاية التشغيل ()} // نهاية 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 (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" ، "ملخص لمهارات برمجة Socket Java" ، "ملخص ملف Java و Signory Operation مهارات" المهارات "و" ملخصة "من Java Cy.
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.