หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 5 9 1 7 4 0

7 ธันวาคม พ.ศ.2549
98 Users On-Line.
Visitors - Page views
 8 9 4 6 7 9 0
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

แจกฟรีโค้ดโปรแกรม Scan Port คอมพิวเตอร์ (LAN และ Internet) - VB6

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 5/7/2553   เวลา: 14:33
(อ่าน : 23099) 
ในทางระบบเครือข่าย (Network) ... Port คือ ประตู หรือ ช่องทางของการไหลเข้าออกของข้อมูล มีจำนวนขนาด 2 ยกกำลัง 16 หรือเท่ากับ 65536 Port (มีค่าระหว่าง 0 - 65535 น่ะครับ) โดยค่าตัวเลขเหล่านี้ก็จะเป็นค่าโดยเฉพาะ หรือ ถูกกำหนดไว้แล้วของแต่ละ Port ว่ามันต้องทำงานอะไร เช่น Port 20/21 สำหรับ FTP (File Transfer Protocal) เพื่อใช้ในการโอนถ่ายไฟล์ หรือ Port 80 สำหรับ HTTP (Hyper Text Transfer Protocol) เป็นการเข้าใช้งาน Web Browser นั่นเองครับ ... ซึ่งไม่แต่เฉพาะระบบเครือข่ายเท่านั้น อุปกรณ์ที่ต่อพ่วงคอมพิวเตอร์ มันก็ต้องมี Port เพื่อรับส่งข้อมูลเหมือนกัน เช่น COM Port หรือ Paralell Port นั่นยังไงล่ะครับ ... เอาหลักการเบื้องต้นแค่นี้พอ ที่เหลือหาข้อมูลเพิ่มเติมเอาเองอีกน่ะครับ
    ประโยชน์ของการเขียนโปรแกรมตรวจสอบ หรือ Scan หา Port มาใช้งานเอง
  • สำหรับผู้ดูแลระบบเครือข่าย สามารถตรวจสอบเครื่องคอมพิวเตอร์ (Client) ในระบบ LAN ว่าเครื่องไหนที่เปิด Port สำคัญ หรือ อันตรายเอาไว้ โดยที่ไม่ต้องเข้าไปนั่งอยู่หน้าจอของเครื่องนั้นๆเลย เช่น Port TCP และ UDP 135 ของ DCOM RPC (Windows Distributed Component Object Model Remote Procedure Call) เพราะ Port นี้เป็นรูโหว่ให้หนอนน้อย W32.Blaster.Worm เข้ามารุกราน โจมตีได้ ... จึงทำให้ผู้ดูแลระบบสามารถเข้าไปจัดการแก้ไขในเครื่อง Client ได้ทันท่วงที ก่อนที่จะลุกลามไปก่อกวนระบบเครือข่ายทั้งหมดได้
  • เป็นผลงานของผู้ดูแลระบบเองนั่นแหละ ซึ่งส่วนใหญ่ก็มักจะเอาของฟรีจากต่างประเทศมาใช้งาน แต่ก็นั่นแหละครับ บางองค์กรก็ค่อนข้างที่จะเข้มงวด ในการนำ Software จากภายนอกมาใช้งาน ... มันก็เลยเป็นช่องทางเปิดโล่งให้ตัวเรานำเสนองานในแนวคิดริเริ่มสร้างสรรค์ได้ยังไงล่ะครับ (เหมือนเช่นในอดีตที่ผมเคยทำมาแล้วครับ)
  • ได้เรียนรู้ ฝึกฝน จากของจริง ประสบการณ์จริง ... จะทำให้มีการพัฒนาขีดความสามารถของตนเองออกไปได้อีก ... ค่าตัวก็เพิ่มขึ้นตามไปแหละครับ (Value Add) ... อิอิอิอิอิ
ดาวน์โหลด Source Code สำหรับผู้ใช้งาน Visual Basic 6
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ข้อมูลเพิ่มเติม
แจกฟรีโค้ดโปรแกรมอ่านค่า IP Address เป็น DNS (LAN และ Internet) - VB6
แจกฟรีโค้ดโปรแกรม Scan หมายเลข IP Address - VB6
โค้ดโปรแกรมอ่านค่า MAC Address ในเครือข่าย LAN - VB6
วิดีโอสอนขั้นตอนการ Debug Program ด้วย MS Visual Basic 6.0
เรื่องของโปรแกรมย่อย (อีกที) ... Sub Program, Routine, Procedure หรือ Function
การเปลี่ยนค่า MAC Address (Media Access Control Address) แบบง่ายๆ
VB6 กับการอ่านค่า MAC Address ของ LAN Card ด้วยวิธีบ้านๆ (ตามเคย)

ใช้ Component เพิ่มมาอีก 2 ตัว โดยเลือกจากเมนู Project --> Components ...


Design Time


Run Time

มาดูโค้ดกันเถอะ ...

Option Explicit

' นับจำนวน Port ที่ตรวจพบ
Dim CountPort As Long

' เก็บค่า Port เริ่มต้น และ ค่านี้จะเพิ่มขึ้นทีละ 1 ไปเรื่อยๆจนกว่าจะครบ
Dim PortToScan As Integer

' เก็บค่า IP Address เพื่อกำหนดให้กับ Winsock
Dim strIP As String

' ตัวแปรเก็บค่าสถานะของการ Scan หา Port
' หากเป็นจริง สถานะกำลัง Scan
' หากเป็นเท็จ สถานะหยุดการ Scan ไว้ชั่วคราว
Dim blnScan As Boolean

' กรณีสั่งหยุดการ Scan ชั่วคราว
Private Sub cmdStop_Click()
    ' กำหนด False เพื่อหยุดการ Scan Port
    blnScan = False
End Sub

Private Sub Form_Load()
    ' ตั้งฟอร์มอยู่กึ่งกลาง
    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
    
    ' ปิด Timer เอาไว้ก่อน เพราะยังไม่ได้สั่งให้มันทำงาน
    Timer1.Enabled = False
    
    ' ตัวอย่างน่ะครับ
    txtStartIP(0).Text = "192"
    txtStartIP(1).Text = "168"
    txtStartIP(2).Text = "0"
    txtStartIP(3).Text = "1"
    
    ' Port เริ่มต้น
    txtPort(0).Text = "1"
    ' Port สิ้นสุด
    txtPort(1).Text = "8000"
    
    txtScanResult.Text = ""
    cmdStop.Enabled = False
    
End Sub

' ###################################################
' การกดปุ่มให้เริ่มต้น Scan หา Port
' ###################################################
Private Sub cmdScan_Click()
    On Error GoTo ErrorHandler

    Dim Count As Integer
    
    ' ตรวจสอบว่า IP ในการค้นหา ทั้ง 4 ชุด เป็นค่าว่างหรือไม่
    For Count = 0 To 3
        If Trim(txtStartIP(Count).Text) = "" Or Len(Trim(txtStartIP(Count).Text)) = 0 Then
            MsgBox "กรุณาป้อนหมายเลข IP Address ให้ถูกต้องด้วย.", vbOKOnly + vbExclamation, "รายงานสถานะ"
            Exit Sub
        End If
    Next Count
    
    ' ตรวจสอบว่าป้อนหมายเลข Port ทั้งเริ่มต้น และ สิ้นสุดหรือไม่
    If Trim(txtPort(0).Text) = "" Or Len(Trim$(txtPort(0).Text)) = 0 Then
        MsgBox "กรุณาป้อนหมายเลข Port เริ่มต้นก่อนด้วย.", vbOKOnly + vbExclamation, "รายงานสถานะ"
        txtPort(0).SetFocus
        Exit Sub
    ElseIf Trim(txtPort(1).Text) = "" Or Len(Trim$(txtPort(1).Text)) = 0 Then
        MsgBox "กรุณาป้อนหมายเลข Port สิ้นสุดก่อนด้วย.", vbOKOnly + vbExclamation, "รายงานสถานะ"
        txtPort(1).SetFocus
        Exit Sub
    
    ' Port สิ้นสุด ต้องมีค่ามากกว่า Port เริ่มต้น
    ElseIf Val(txtPort(0).Text) > Val(txtPort(1).Text) Then
        MsgBox "กรุณาป้อนหมายเลข Port สิ้นสุดให้มากกว่าหมายเลข Port เริ่มต้นก่อนด้วย.", _
                        vbOKOnly + vbExclamation, "รายงานสถานะ"
        txtPort(1).SetFocus
        Exit Sub
    End If
    
    ' เคลียร์ข้อมูล Status Bar Panel แรก
    sbMain.Panels(1).Text = ""
    ' เคลียร์ค่า TextBox ในการแสดงผลหมายเลข Port
    txtScanResult.Text = ""
    ' เคลียร์ค่าการนับจำนวน Port
    CountPort = 0
    
    ' กำหนดช่วงเวลาในการ Scan หา Port มีหน่วยเป็นมิลลิวินาที โดย 1000 ms = 1 วินาที
    ' บางครั้งก็อาจจะต้องกำหนดให้ใช้เวลานาน เพราะมันขึ้นกับสายและระยะทาง หรืออื่นๆ ด้วยน่ะครับ
    Timer1.Interval = 100
    
    cmdScan.Enabled = False
    cmdStop.Enabled = True
    
    ' เก็บค่า IP Address ไว้ในตัวแปร เพื่อความสะดวกในการเรียกใช้งาน
    strIP = txtStartIP(0).Text & "." & txtStartIP(1).Text & "." & txtStartIP(2).Text & "." & txtStartIP(3).Text
    
    ' แจ้งหมายเลข Port ที่กำลัง Scan Port
    txtScanResult.Text = txtScanResult.Text & "ตรวจสอบหมายเลข Port ของ IP Address: " & strIP & vbCrLf
    
    ' กำหนดหมายเลข Port เริ่มต้นให้กับตัวแปร เพราะค่านี้ต้องเพิ่มค่าขึ้นทีละ 1 จนกว่าจะครบ
    PortToScan = txtPort(0).Text
    
    ' ขณะนี้กำลังทำการ Scan เมื่อไรก็ตามที่ค่านี้มีค่าเป็น False ก็จะหยุดการทำงานลงทันที
    blnScan = True
    
    ' กระตุ้นนาฬิกาให้ทำงานต่อไป
    Timer1.Enabled = True
    
ExitProc:
    Exit Sub
    
ErrorHandler:
    
    ' ขณะโปรแกรมกำลังทำงาน (Run Time) ดัก Error จาก On Error GoTo ErrorHandler
    If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    Resume ExitProc
    
End Sub

' ###################################################
' โปรแกรมย่อยในการ Scan หา Port ตามช่วงที่กำหนดเอาไว้
' ###################################################
Private Sub ScanPort

    On Error GoTo ErrorHandler
    
    ' เงื่อนไขให้ Scan Port เริ่มจาก Port เริ่มต้นที่กำหนด และ นับขึ้นทีละ 1 ไปเรื่อยๆจนกว่าจะครบ
    ' และ ยังไม่มีการกดปุ่ม cmdStop ให้หยุดการทำงาน
    If PortToScan <= Val(txtPort(1).Text) And blnScan = True Then
        
        ' ให้ CPU ไปทำงานอย่างอื่นได้เลย (คืน CPU กลับไปให้กับระบบปฏิบัติการ - OS)
        DoEvents
        
        ' หาก Winsock ยังมีการ Connect กับ IP ใดๆอยู่ ต้องสั่งให้ Disconnect ออกไปก่อน
        If wsIP.State <> sckClosed Then wsIP.Close
        
        ' ###################################################
        ' ส่วนสำคัญที่กำหนดค่าเพื่อทำการทดสอบ
        
        ' กำหนด IP Address ให้กับ Winsock
        wsIP.RemoteHost = strIP
        
        ' กำหนดหมายเลข Port ในการติดต่อกับ Remote IP
        wsIP.RemotePort = PortToScan
        
        ' Winsock ติดต่อหมายเลข IP Address และ หมายเลข Port ตามที่กำหนด
        ' หวกสามารถติดต่อ IP Address และ Port ที่กำหนดได้ ก็จะกระโดดไปเหตุการณ์ wsIP_Connect()
        ' จากนั้นเราก็ให้มันแสดงผลตามหมายเลข Port ที่ Connect ออกมายังไงล่ะครับ
        ' จะเห็นการทำงานในส่วนนี้ได้ คุณต้องทำการ Debug ดูด้วยน่ะครับ ...
        wsIP.Connect
        
        ' ###################################################

        ' เพิ่มค่า Port ในการ Scan ขึ้นอีก 1
        PortToScan = PortToScan + 1
        
    ' Scan หา Port ครบแล้ว หรือ สั่งให้หยุดการ Scan
    Else
        
        cmdScan.Enabled = True
        cmdStop.Enabled = False
        
        ' สั่งให้ Timer1 หยุดการทำงานด้วย
        Timer1.Enabled = False
        
        ' รายงานผลการ Scan Port ใน StatusBar
        If PortToScan <= Val(txtPort(1).Text) Then
        
            sbMain.Panels(1).Text = "หยุดการทำงานที่ Port: " & PortToScan
            
            ' กำหนดค่า Port เริ่มต้นใหม่ เพื่อจะได้ทำการ Scan ต่อไปได้เลย
            txtPort(0).Text = PortToScan
            
        ' กรณี Scan Port เสร็จสมบูรณ์หมดแล้ว
        Else
            sbMain.Panels(1).Text = "การทำงานเสร็จสมบูรณ์ - " & CountPort & " Port"
            MsgBox "Scan หา Port ของหมายเลข IP Address " & strIP & " ได้ " & CountPort & " Port"
        End If
    End If
    

ExitProc:
    Exit Sub
    
ErrorHandler:
    
    ' ขณะโปรแกรมกำลังทำงาน (Run Time) ดัก Error จาก On Error GoTo ErrorHandler
    If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    Resume ExitProc
    
End Sub

' ###################################################
' ตราบใดที่ Timer1.Enabled = True มันก็จะเข้ามาทำงานที่นี่ ตามค่า Interval ที่ตั้งเอาไว้
' ###################################################
Private Sub Timer1_Timer()
    ' หาก Timer1 มีค่า Enabled ก็จะสั่งให้ไปทำงานที่โปรแกรมย่อย ScanPort ตามเวลาที่กำหนด
    sbMain.Panels(1).Text = "กำลังประมวลผล IP: " & strIP & "." & IPStartScan
    
    ' ไป Scan หา Port หรือ
    ' ตรวจสอบการ Connect IP Address/Port กับ Winsock Control นั่นแหละครับ
    Call ScanPort

End Sub

' ###################################################
' กรณีที่ Winsock สามารถ Connect ด้วยคำสั่ง wsIP.Connect
' หากมีการ Connect กับ IP ที่ทดสอบอยู่ให้ทำการแจ้งผลใน TextBox
Private Sub wsIP_Connect()
' ###################################################

On Error GoTo ErrorHandler
    
    ' แสดงผลหมายเลข Port ใน TextBox
    txtScanResult.Text = txtScanResult.Text & "Port : " & wsIP.RemotePort & vbCrLf
    
    ' นับจำนวน Port ที่ตรวจพบ
    CountPort = CountPort + 1
    
ExitProc:
    Exit Sub

ErrorHandler:
    
    ' ขณะโปรแกรมกำลังทำงาน (Run Time) ดัก Error จาก On Error GoTo ErrorHandler
    If Err.Number <> 0 Then MsgBox "Error: " & Err.Number & vbCrLf & Err.Description
    Resume ExitProc

End Sub

Private Sub cmdExit_Click()
    Set frmPortScan = Nothing
    End
End Sub
Conclusion:
ข้อคิดเห็นในการพัฒนาต่อไป .... จากโค้ดนี้ ผมไม่ได้จัดเก็บเป็น Logging File เอาไว้ให้ แต่คุณก็สามารถหาดูตัวอย่างการ Save เป็น Text File ได้ทั้งจากเว็บไซต์ของผม หรือ ที่อื่นๆก็มีเพียบครับ ... อีกทั้งผมไม่ได้เขียนโค้ดตรวจสอบว่ามันมีการเชื่อมต่อ (Connect) กับเครื่องปลายทางอยู่หรือไม่ด้วยน่ะครับ ก็ลองปรับ ลองแก้ไขเพิ่มเติมดู เพื่อเป็นการพัฒนาต่อ-ยอดออกไปได้อีกครับ ... พี่น้อง

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560