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.381 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. |
Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 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. |