vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: HTML/Internet/Netzwerk · Winsock   |   VB-Versionen: VB4, VB5, VB611.08.05
Port forwarding

Dieser Tipp zeigt, wie man mit dem Winsock-Control Ports forwarden (weiterleiten) kann.

Autor:   Kilian MeyerBewertung:     [ Jetzt bewerten ]Views:  15.360 
www.firewall-vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Dieser Tipp zeigt, wie man mit dem Winsock-Control Ports forwarden (weiterleiten) kann. Auch kann man damit bestehende Protokolle (POP3, SMTP, IRC, ...) erforschen, um sie aus eigenen Anwendungen heraus zu probieren. 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 Mailclient die IP-Adresse des POP3 Server auf "127.0.0.1" oder auch "localhost" ein. Nun empfängt man standardmäßig über den Mailclient seine E-Mails und kann dann das Protokoll im Log-Fenster nachvollziehen. Auf diese Weise kann man auch das IRC-Protokoll "ausspionieren" um seinen eigenen IRC-Bot zu schreiben.

Der eigentliche Einsatz des Portforwardings 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 Portforwarder 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.

Benötigt werden zwei Winsock-Controls (wsckSend und wsckListen), ein Commandbutton (Command1), eine ListBox (List1) sowie 5 Textfelder (Text1 bis Text5).

Option Explicit
 
Dim bConnected As Boolean
Dim bSendComplete1 As Boolean
Dim bSendComplete2 As Boolean
' ### Laden der Form ###
Private Sub Form_Load()
  ' Vorbereiten der Variablen
  bConnected = False
  bSendComplete1 = True
  bSendComplete2 = True
End Sub
' ### Starten/Beenden des Vorgangs ###
Private Sub Command1_Click()
  If bConnected = False Then
    ' Starten des Services
    wsckListen.Close
    wsckSend.Close
 
    wsckListen.LocalPort = Text2.Text
    wsckListen.Listen
 
    Command1.Caption = "Stop Service"
    List1.Clear
 
    bConnected = True
  Else
    ' Stoppen des Services
    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)
  ' Die Statusanzeige schreiben
  List1.AddItem "[" & Format(Time(), "hh:mm:ss") & "] " & sText
End Function
' ### Beim Click auf die Status-Liste ###
Private Sub List1_Click()    
  ' Anzeigen des Status-Textes
  With List1
    If .ListIndex >=0 Then  
      Text5.Text = .List(.ListIndex)
    End If
  End With
End Sub
' ### Bei einem Verbindungsaufbau an den Listen-Port ###
Private Sub wsckListen_ConnectionRequest(ByVal requestID As Long)
  If wsckListen.State <> sckClosed Then
    wsckListen.Close
 
    ' Status setzen
    Call SetStatus("Client is connecting . . .")
    Call SetStatus("Connecting to Server . . .")
 
    ' Verbindung zum Weiterleiten öffnen
    wsckSend.RemoteHost = Text4.Text
    wsckSend.RemotePort = Text3.Text
    wsckSend.Connect
 
    ' Überprüfen ob die Verbindung zum Server hergestellt wurde
    Do While wsckSend.State <> sckConnected
      DoEvents
    Loop
    Call SetStatus("Connected to Server successfully!")
 
    ' Annehmen der Verbindung
    wsckListen.Accept requestID
 
    ' Überprüfen ob die Verbindung zum Client hergestellt wurde
    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
 
  ' Empfangene Daten in Variable speichern
  Call wsckListen.GetData(sData, vbString)
 
  If wsckSend.State = sckConnected Then
    ' Warten bis alle Daten an den Server geleitet wurden
    Do While bSendComplete1 = False
      DoEvents
    Loop
 
    ' Status setzen
    Call SetStatus("|-> " & sData)
 
    ' Senden der Daten an den Server
    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
 
  ' Empfangene Daten in Variable speichern
  Call wsckSend.GetData(sData, vbString)
 
  If wsckListen.State = sckConnected Then
    ' Warten bis alle Daten an den Server geleitet wurden
    Do While bSendComplete2 = False
      DoEvents
    Loop
 
    ' Status setzen
    Call SetStatus("|<- " & sData)
 
    ' Senden der Daten an den Server
    bSendComplete2 = False
    wsckListen.SendData sData        
  End If
End Sub
' ### Wenn das Senden an den Server vollendet ist ###
Private Sub wsckListen_SendComplete()
  ' Variable setzen
  bSendComplete2 = True
End Sub
' ### Wenn das Senden an den Clienten vollendet ist ###
Private Sub wsckSend_SendComplete()
  ' Variable setzen
  bSendComplete1 = True
End Sub

Dieser Tipp wurde bereits 15.360 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel