Tipp 0469 Port-Weiterleitung
Autor/Einsender:
Datum:
  Kilian Meyer
05.11.2005
Entwicklungsumgebung:   VB 6
Dieser Tipp zeigt, wie man mit dem Winsock-Control Ports weiterleiten (forwarden) kann. Auch bestehende Protokolle (POP3, SMTP, IRC, ...) kann man damit erforschen, um sie aus eigenen Anwendungen heraus zu testen.
Um etwa das POP3-Protokoll zu erforschen, gibt man als Listen-Port 110 an. Unter "Connect to" als Port 110 und als Server den eigenen POP3-Server. Man startet den Service und stellt im Mail-Client die IP-Adresse des POP3-Servers auf "127.0.0.1" oder auch "localhost" ein. Nun empfängt man standardmäßig über den Mail-Clienten seine E-Mails und kann dann das Protokoll im Log-Fenster nachvollziehen. Auf diese Weise kann man auch das IRC-Protokoll "ausspionieren", um einen eigenen IRC-Bot zu schreiben.
Der eigentliche Einsatz der Port-Weiterleitung bleibt allerdings einen Port auf einem Computer zu öffnen und alle Verbindungen an einen anderen Computer und/oder einen anderen Port weiterzuleiten.
Möchte man etwa einen Server der in einem Firmen- oder Heimnetzwerk auf einem Client-Rechner liegt von außerhalb ansprechen, so installiert man auf dem Netzwerk-Server den Port-Forwarder und lässt den gewünschten Port an die Netzwerk-IP weiterleiten.
Genau das selbe wird bei der Linux-Firewall mit dem Befehl "iptables -t nat -A PREROUTING ..." erreicht.
 
Option Explicit

Dim bConnected     As Boolean
Dim bSendComplete1 As Boolean
Dim bSendComplete2 As Boolean

'Laden der Form
Private Sub Form_Load()
  bConnected = False
  bSendComplete1 = True
  bSendComplete2 = True
End Sub

'Starten/Beenden des Vorgangs
Private Sub Command1_Click()
  If bConnected = False Then
    wsckListen.Close
    wsckSend.Close

    wsckListen.LocalPort = Text2.Text
    wsckListen.Listen

    Command1.Caption = "Stop Service"
    List1.Clear

    bConnected = True

  Else
    Call SetStatus("Closing Connection . . .")
    wsckListen.Close
    wsckSend.Close

    Call SetStatus("Connection closed!")
    bConnected = False

    Command1.Caption = "Start Service"
  End If
End Sub

'Statusanzeige setzen
Public Function SetStatus(ByVal sText As String)
  List1.AddItem "[" & Format(Time(), "hh:mm:ss") & "] " & sText
End Function

'Bei Click auf die Status-Liste
Private Sub List1_Click()
  Dim iCount As Integer

  For iCount = 0 To List1.ListCount - 1
    If List1.Selected(iCount) = True Then
      Text5.Text = List1.List(iCount)
      Exit For
    End If
  Next iCount
End Sub

'Bei einem Verbindungsaufbau an den Listen-Port
Private Sub wsckListen_ConnectionRequest(ByVal requestID As Long)
  If wsckListen.State <> sckClosed Then
    wsckListen.Close

    Call SetStatus("Client is connecting . . .")
    Call SetStatus("Connecting to Server . . .")

    wsckSend.RemoteHost = Text4.Text
    wsckSend.RemotePort = Text3.Text
    wsckSend.Connect

    Do While wsckSend.State <> sckConnected
      DoEvents
    Loop

    Call SetStatus("Connected to Server successfully!")

    wsckListen.Accept requestID

    Do While wsckListen.State <> sckConnected
      DoEvents
    Loop
    Call SetStatus("Connected to Client successfully!")

    bConnected = True
  End If
End Sub

'Beim Empfangen vom Client
Private Sub wsckListen_DataArrival(ByVal bytesTotal As Long)
  Dim sData As String

  Call wsckListen.GetData(sData, vbString)

  If wsckSend.State = sckConnected Then
    Do While bSendComplete1 = False
      DoEvents
    Loop

    Call SetStatus("|-> " & sData)

    bSendComplete1 = False
    wsckSend.SendData sData
  End If
End Sub

'Beim Empfangen vom Server
Private Sub wsckSend_DataArrival(ByVal bytesTotal As Long)
  Dim sData As String

  Call wsckSend.GetData(sData, vbString)

  If wsckListen.State = sckConnected Then
    Do While bSendComplete2 = False
      DoEvents
    Loop

    Call SetStatus("|<- " & sData)

    bSendComplete2 = False
    wsckListen.SendData sData
  End If
End Sub

'Wenn das Senden an den Server vollendet ist
Private Sub wsckListen_SendComplete()
  bSendComplete2 = True
End Sub

'Wenn das Senden an den Clienten vollendet ist
Private Sub wsckSend_SendComplete()
  bSendComplete1 = True
End Sub
 

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,5 kB) Downloads bisher: [ 759 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 27. August 2011