[VisualBasic] Einen Port mit zwei Programmen abhören?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Gibbon, 31. März 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 31. März 2007
    Einen Port mit zwei Programmen abhören?

    Ich hab folgendes Problem:

    Es gibt ein Programm, das sagen wir mal auf Port 123 auf Verbindungen wartet (abhört). Ich will ein Programm erstellen, das sich auf Port 123 zu diesem Programm verbindet und dann selbst auf dem Port 123 auf verbindungen wartet (so wie ein Proxy). Ich bekomme aber immer den Fehler, dass die Adresse bereits in Benutzung ist!

    Wie schaff ich es, dass mein Programm sich erst auf Port 123 zum anderen programm verbindet und dann selber auf 123 abhört?

    Hier der Code:

    Code:
    Private Sub Form_Load()
     Winsock1.RemoteHost = "127.0.0.1"
     Winsock1.RemotePort = "123"
     Winsock1.Connect
     
     Winsock2.LocalPort = "123"
     Winsock2.Listen
     
     '-> Dann kommt der Laufzeitfehler: "Address in Use"
    End Sub
     
  2. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    Wenn du auf localhost connecten willst, muss da ja bereits das Programm auf dem Port 123 horchen, da sonst dein Connect fehlschlaegt. Du kannst nicht 2x auf dem gleichen Port horchen.
     
  3. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    mit der ocx wirste nicht weitkommen, da musste schon die api nehmen
     
  4. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    Könntest du noch posten, wie man das dann macht?
     
  5. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    ich geb dir von vornherein den tipp, es gleich sein zu lassen, sonst denkst du dir "proggen is ja assi" und rührst die nächsten 6 monate keinen sourcecode mehr an

    mit anderen worten:
    ich traus dir net zu und wenn dus schaffst (im zeitraum von 7 tagen), dann wars pures glück

    trotzdem:
    aktuelle ports zusammen mit programm ausgeben lassen
    per api sich an den port binden

    ^^das höhrt sich einfacher an als es ist

    ps:
    das ist jetzt bissle hart, aber es ist halt nunmal so, wenndes nicht glauben willst, sag doch mal wasde kannst, dann redmer weiter
     
  6. 31. März 2007
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Einen Port mit zwei Programmen abhören?

    Hab z. B. den ICQ-Proxy programmiert ^^

    Und noch viele andere kleine Programme.. ^^
     
  7. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    visual basic, vb, vbscript,Free source code for the taking. Over five million lines of programs.

    learning by doing/reading

    edit:
    RAW IP Sniffer by MaRi
     
  8. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    Öhm, ich wollte eigentlich keinen Packet-Sniffer (davon gibts genug im Internet^^)

    Ich erklär mein Problem lieber nochmal und diesmal mit dem richtigen Port usw. xD

    Aaaalso:

    Du kennst sicher das Spiel Worms Armageddon. Wenn man da ein Spiel hostet, wartet Worms auf Verbindungen auf Port 17011. Ich will ein Programm erstellen, das sich auf diesem Port mit Worms verbindet (das geht auch ohne Probleme^^).
    Nachdem es sich verbunden hat, soll es auf dem Port 17011 auf eine Verbindung warten, zu dem sich dann ein Client verbinden kann. Mein Programm ist also eine Art Proxy.

    Wieso ich den Laufzeitfehler "Adress in use" bekomme, versteh ich aus folgendem Grund nicht:

    Wenn ich ein Winsock-Control mit dem Index 0 habe und das eine Verbindung erhält, mach ich einfach ein neues und höre auf dem gleichen Port ab:

    Code:
    Private Sub Form_Load()
     Winsock1(0).LocalPort = "1337"
     Winsock1(0).Listen
    End Sub
    
    Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
     Winsock1(Index).Close
     Winsock1(Index).Accept requestID
     
     Load Winsock1(Index + 1)
     Winsock1(Index + 1).LocalPort = "1337"
     Winsock1(Index + 1).Listen
    End Sub
    So kann ich auf einem Port mehrere Verbindungen haben, ohne den Laufzeitfehler. Das gleiche Prinzip müsste doch auch funktionieren, wenn es sich um zwei verschiedene Programme handelt, oder nicht?
     
  9. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    das ist doch in der praxis egal da dein proxy ja sowieso nicht auf dem gleichen server wie der worms amaggedon server läuft. Drum hast ja dann das prob nicht!
    Und wenn du den proxy auf dem gleich server wie den worms server installiert hast macht das ja wenig sinn.

    mfg tobZel
     
  10. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    Ich bin der Host des Spiels (-> Worms läuft auf meinem PC) und der Proxy läuft auch auf meinem PC.
    Warum ich das so machen will, ist doch mein Problem^^

    Ich will nur wissen, wieso es mit einem Programm geht, mit 2 aber nicht (siehe mein vorheriger Post).
     
  11. 31. März 2007
    AW: Einen Port mit zwei Programmen abhören?

    server listet auf port 17011
    du listest auf 17011 (wie denn wenn das der server schon macht)

    ist klar dass das nicht geht
    ein proxy funkt nicht in der weise. da musste dich wieder, so ähnlich wie beim sniffer, per api anbinden und dann halt modifizieren.. dafür ist vb aber eigentlich die falsche sprache, denn derartige vorhaben hab ich auch schon mit ner eigenentwicklung einer firewall versucht.

    mein tipp: lass das cheaten als server lieber (ich nehme mal an du wolltest weng trixen xD)
     
  12. 1. April 2007
    AW: Einen Port mit zwei Programmen abhören?

    Nein, ich wollte ein Programm machen, mit dem ich bei Bedarf (wenn Leute afk sind) den entsprechenden Socket schließen kann, also sowas wie ein Kick ^^

    Es ist aber nicht ganz so wie du sagst, denn mein Socket hört erst ab, wenn der andere bereits mit Worms verbunden ist. Erklär mir doch bitte mal, wieso dann mein Code funktioniert (mehrere Sockets auf einmal), das ist doch das selbe Prinzip mit Worms:

    Normal: Winsock1(0) ist verbunden -> Winsock1(1) hört ab
    Bei Worms: Winsock1(0) ist zu Worms verbunden -> Winsock1(1) hört ab

    Der einzige Unterschied ist, dass es sich um verschiedene Programme handelt (Der eine, zuerst abhörende Socket, ist in Worms, der andere in meinem Programm). Ich bitte also um eine Erklärung, wieso das eine geht und das andere nicht!
     
  13. 1. April 2007
    AW: Einen Port mit zwei Programmen abhören?

    meinste deinen icq proxy?
     
  14. 1. April 2007
    AW: Einen Port mit zwei Programmen abhören?

    so ich dacht mir, jetzt geb isch auch mal meinen senf dazu ;-)
    Ich kann zwar bloß c++ aber is ja im prinzip das gleiche.
    Wenn du in deinem Programm, einen Port aufmachst, kriegt Windows die Order den Port aufzumachen und ordnet den Port deinem Programm zu. Solange alles innerhalb deines Programmes bleibt, interessiert es Windows einen sch*iß ob da irgentwas doppelt belegt ist oder nicht.
    Sobald aber der Port aber noch von einem anderen Programm benutzt wird, entsteht ein Konflikt für Windows, weil es nicht unterscheiden kann, was für welches Programm gedacht ist.
    Der Sinn davon, dass man innerhalb eines Programmes doppelt belegen kann ohne Fehlermeldung, ist das das Programm die Daten wohl erstmal empfangen und dann auswerten wird. Windows kann aber diese Auswertung nicht vornehmen (wie denn auch).
    Falls das nicht so seien sollte, belehre mich bitte eines Besseren ;-).

    mfg thecoolman4rr

    PS: Lösen könntest du das Problem, in dem du den ServerPort änderst und von dem "Proxy" alles auf den neuen Serverport umlenken lässt.

    PS2: Ich hab mir grad deinen ICQ-Proxy angesehen... der funktioniert ja nach dem selben Prinzip... dein Programm empfängt die Daten und leitet sie dann auf den Port 1337 (der ganz bestimmt nicht der Standart icqport ist ^^) um, auf dem IcQ am lauschen ist.
     
  15. 1. April 2007
    AW: Einen Port mit zwei Programmen abhören?

    Nein, ich meine den hier:

    Code:
    Private Sub Form_Load()
     Winsock1(0).LocalPort = "1337"
     Winsock1(0).Listen
    End Sub
    
    Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
     Winsock1(Index).Close
     Winsock1(Index).Accept requestID
     
     Load Winsock1(Index + 1)
     Winsock1(Index + 1).LocalPort = "1337"
     Winsock1(Index + 1).Listen
    End Sub

    Aber entscheidet Windows nicht vorher sowieso, an welchen Socket es geschickt wird? Ich kann mich auch täuschen, aber sieht das nicht so aus:

    Paket -> Windows -> Aha! Das Paket ist für Socket blablubb -> Paket wird ans Programm geschickt mit der Information, für welchen Socket es ist

    Wenn es jedoch vom Programm entschieden wird, für welchen Socket das Paket ist, hat sich alles geklärt und ich mag Windows nicht mehr, weil ich in Worms keine Leute kicken kann, die afk sind
     
  16. 1. April 2007
    AW: Einen Port mit zwei Programmen abhören?

    hmm also ich hätte jetzt gesagt ja, man kann Ports nur einem Prozess zuordnen ... bin dann aber unsicher geworden und hab nen bischel gesucht und folgendes gefunden:
    Quelle: Beitrag nicht mehr verfügbar | TecChannel.de (bei google eingeben, falls der Fehler kommt du solltest nen premiumabo haben ^^)

    Es steht leider nicht direkt drin, aber folgendes lässt mich meine Aussage als bestätigt sehen:
    • Die Transportprotokolle selber nutzen Portnummern zur Identifizierung von Anwendungen.
    • Anwendungsprozesse werden anhand einer 16-Bit langen Portnummer identifiziert.

    ich hoffe ich hab's richtig verstanden...

    mfg thecoolman4rr
     
  17. 1. April 2007
    AW: Einen Port mit zwei Programmen abhören?

    Sorry, war mein Fehler

    Sobald sich jemand zu meinem Spiel verbindet (in Worms Armageddon), hört Worms mit dem nächsten Socket auf dem Port ab, es wird also immer abgehört. Deswegen ist es auch logisch, dass immer der Fehler "Address in use" kommt

    Ihr bekommt aber natürlich beide ne BW für eure Bemühungen ^^

    *close*

    -- Edit --

    Das dachte ich mir auch anfangs, jedoch kann man bei Worms den Serverport nicht einstellen

    Falls du weißt, wie das doch gehen könnte, schreib mir bitte ne PN ^^
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.