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
Anzeige
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. |
sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |