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.131 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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 ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |