TCP Verbindung. Empfange nur den ersten Teil richtig

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von n1nja.

    TCP Verbindung. Empfange nur den ersten Teil richtig

    Hallo Leute, ich bastel mir seid ein paar Tagen nen Remote Tool zusammen.
    Jetzt hab ich ein Problem, das ich wenn ich größere Mengen an Strings verschicke empfange ich nur den die ersten paar Zeichen komplett und richtig, danach werden mir nur Hieroglyphen angezeigt. Das liegt aber eher wahrscheinlich durch die Verschlüsslung.
    Ich denke mal das bei der Verbindung irgendwas dazwischen kommt und ich empfange dann durcheinander.

    Hier mal die senden und empfangen Teile:

    VB.NET-Quellcode

    1. Public Shared Function ReadFromStream(Stream As NetworkStream) As String
    2. Dim int As Integer = Nothing
    3. Dim mes As String = String.Empty
    4. Dim buff(1024) As Byte
    5. Do
    6. int = Stream.Read(buff, 0, buff.Length)
    7. mes &= Encoding.UTF8.GetString(n1nja(buff), 0, int)
    8. Loop While Stream.DataAvailable
    9. Return mes
    10. End Function


    VB.NET-Quellcode

    1. Public Shared Sub SendIntoStream(Stream As NetworkStream, Message As String)
    2. Dim mes As Byte() = Encoding.UTF8.GetBytes(Message)
    3. Stream.Write(n1nja(mes), 0, mes.Length)
    4. Stream.Flush()
    5. End Sub


    Ich hab ein Screenshot angehängt wie es aussieht.
    Hab auch schon versucht den Buffer vom emfangen zu ändern.
    Wenn ich den größer stelle dann wird mehr richtig übertragen, aber sobald ich ne über 4mb stelle, ist die Verbindung nicht mehr so stabil wie es sein sollte.

    Danke schonmal.

    Ok kleiner Nachtrag:
    Ohne meine Verschlüsslung funktioniert alles tadellos.
    Jetzt ist die Frage, wieso kommen die Daten beim Entschlüsslen durcheinander?!
    Bilder
    • software.jpg

      426,35 kB, 659×463, 158 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „n1nja“ ()

    Kannst du den Code vom Entschlüsseln bzw. Verschlüsseln hinzufügen ? Ohne den kann man/ich nicht viel sagen.
    Außer vielleicht ist "n1nja" deine Verschlüsseln Funktion ? Versuchs mal so:

    VB.NET-Quellcode

    1. Public Shared Sub SendIntoStream(Stream As NetworkStream, Message As String)
    2. Dim mesCrypted As Byte() =n1nja( Encoding.UTF8.GetBytes(Message))
    3. Stream.Write(mesCrypted, 0, mesCrypted.Length)
    4. Stream.Flush()
    5. End Sub


    MfG
    Ja schon, aber beim Empfangen. Beim senden passt alles soweit. Ich hab jetzt noch festgestellt, das es unterschiedlich ist wie weit er richtig ausließt. Local, also mit 127.0.0.1 ließt er mehr aus, als wenn ich es übers
    Netzwerk mache.
    Achtung!
    Der "n1nja", bastelt hier höchstwahrscheinlich an einem Trojaner, er sagte ja selber "Remote Tool" und auch sonst sieht der Screenshot ganz danach aus!
    Remote Administration Tools sind Programme, die dazu geeignet sind sich als Trojaner im System einzunisten und den Benutzer auszuspionieren!

    Ich wäre vorsichtig!
    MfG Flero
    Nein, kein Sarkasmus.
    Vertrauen ist gut, wissen ist besser. Natürlich kann es sein, dass der n1nja nichts böses damit vor hat, aber wenn er damit was illegales macht
    und sich herrausstellt, dass ihr ihm geholfen habt, könnt afaik auch ihr dafür haftbar gemacht werden. Daher möchte ich euch nur davor warnen.
    Und ich denke der Postcount sagt nichts aus. Weder wie viel Ahnung jemand hat, noch wie ernst er etwas meint..

    So far, Flerovium
    RATs sind nicht illegal. Nur die Verwendung von RATs bezüglich Abgreifen von Nutzerdaten/Überwachung des Nutzers ist strafbar. RATs selber können ja auch einen positiven Nutzen haben, deswegen ist auch nicht die Herstellung solcher Software illegal, nur eben diese Art von Verwendung. Wir würden ihm aber hier nicht bei der Verwendung helfen.
    Trotzdem ist das soweit ich weiß hier im Forum nicht erlaubt, glaube aber auch nicht dass es sich hier um ein RAT handelt.
    Das ist etwas komplett anderes. Remote Tools werden dazu gemacht, Systeme zu überwachen, was ohne Einverständnis des überwachten nicht erlaubt ist.
    Eine Leiter wird jedoch nicht hergestellt, um damit jemanden totzuschlagen, weshalb es sich dabei um eine Zweckentfremdung handelt. Wie gesagt, wenn ihr ihm hilft und er das später zu illegalen Zwecken nutzt ist es meines Wissens nach Beihilfe zur Straftat.

    so far

    EDIT: @ Olv3r sobald das Überwachen passiert, ohne dass der Überwachte was davon merkt / zustimmt (und das weis man hier eben nicht), handelt es sich bei einem RAT um Schadware. Schau dir den Fall vom DarkComet RAT an. Der Autor musste auch einen Hinweis einfügen, damit das ganze legal ist, wenn ich mich recht entsinne.
    Und nach deutschem Gesetz ist ALLEINE der Besitz oder die Entwicklung von Schadware illegal!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Flerovium“ ()

    Wenn ihr diskutieren wollt dann bitte nicht hier, danke. Wenn ihr was an meine Frage auszusetzen habt, dann müsst ihr nicht antworten.
    Ps. Gibt anscheinend welche die sich gut damit auskennen. Würde vorsichtig sein!
    Ps. Gibt anscheinend welche die sich gut damit auskennen. Würde vorsichtig sein!

    Rein zufällig hab ich Spaß daran Malware zu analysieren. Daran ist nichts verboten / verwerflich, solange ich keine selber programmiere, was ich nicht tue. Ich hae bessere und deutlich anspruchsvollere Projekte, als irgendwelche Malware. Eines davon wird auch bald freigeschaltet.

    Wenn ihr was an meine Frage auszusetzen habt, dann

    Ich habe kein direktes Problem mit der Frage und ich beschuldige dich ja auch nicht direkt,
    ich warne nur die anderen, dass es die Möglichkeit gibt, dass es missbraucht wird, denn ich habe leider
    schon auf anderen Foren gesehen, dass man Leuten geholfen hat, die zumindest mir offensichlich erkennbar Malware geschrieben haben..
    Ok dann ist alles gut. Wenn es dich beruhigt, ist nix in der Art.
    ich betreibe beruflich und privat einige Server und Rechner. Das Remote Tool das ich hier entwickle verwende ich beruflich scho paar Monate. Auch zusammen mit den SPS Anlagen. Mir gehts etz allerdings darum die Kommunikation zu schützen.
    "das es unterschiedlich ist wie weit er richtig ausließt. Local, also mit 127.0.0.1 ließt er mehr aus, als wenn ich es übers
    Netzwerk mache."

    Das wundert mich extrem...
    Hier mal ein Code wie ich es gelöst hab, bei meinem Remotetool:

    VB.NET-Quellcode

    1. Protected _TcpClient As TcpClient
    2. Protected _Stream As NetworkStream
    3. Protected Buf(1024 - 1) As Byte
    4. Protected _BufLength As UInteger = 1024
    5. Protected Sub EndRead(ByVal ar As IAsyncResult)
    6. If Me.IsDisposed Then Return 'Falls der Client geschlossen wurde, wird die Aktion abgebrochen
    7. Dim read As Integer = 0 'Read zum Lesen des Streams erstellen und Wert 0 zuweisen
    8. Try
    9. read = _Stream.EndRead(ar)
    10. Catch ex As Exception 'Unerwartetes Ende des Streams, Ende der Verbindung
    11. Return
    12. End Try
    13. If read = 0 Then 'Verbindung scheint geschlossen zu sein
    14. Return
    15. End If
    16. Dim finaleMessage As New List(Of Byte)
    17. finaleMessage.AddRange(getBytes(Buf, 0, read)) 'Ersten Chunk lesen
    18. Do While _Stream.DataAvailable 'Solange Daten im Stream warten
    19. read = _Stream.Read(Buf, 0, Buf.Length) 'Lese Stream von aktueller Position aus
    20. finaleMessage.AddRange(getBytes(Buf, 0, read)) 'Der der gesamten Byteabfolge den jetzt gelesen Chunk hinzufügen
    21. Loop
    22. 'Naricht ist in finaleMessage drinne
    23. _Stream.BeginRead(Buf, 0, Buf.Length, AddressOf EndRead, Nothing) 'Wieder von vorne anfangen den Stream zu lesen
    24. End Sub
    25. Public Function getBytes(ByVal array As Byte(), ByVal index As Integer, ByVal count As Integer) As List(Of Byte)
    26. Dim r As New List(Of Byte)
    27. For i As Integer = index To count - 1
    28. r.Add(array(i))
    29. Next
    30. Return r.ToList
    31. End Function


    Der Code ist sicher nicht perfekt funktioniert aber soweit, und mit Encoding.Default.GetString einfach konvertieren.

    P.S. Der Code ist halt von einem asychronen Client(würde ich dir eh empfehlen)


    MfG
    Du machst ja im Prinzip auch nix anders als ich, nur das du die Bytes nochmal zwischenspeicherst in ein Array.
    Ist mir persönlich zu umständlich :)

    Ich arbeite ja mit dem FW4.5 und Await Subs etc, zumindest am Client.
    Die Rechner von manchen SPS Steurungen sind noch nicht auf den Stand, das da des laufen würde:)

    Ich bin ja mittlweile schon soweit gekommen, das der erste Block richtig gelesen wird und dann wenn die Schleife neuanfängt, haut er mir die Fehler rein.
    Ohne Verschlüsslung funktioniert alles, egal ob Local oder übers Netzwerk.

    Hab auch scho versucht, die Bytes komplett zu lesen und dann "zurück zu verschlüsseln". So wird mir aber alles falsch ausgegeben.

    schockerjo schrieb:

    Dim finaleMessage As New List(Of Byte)
    finaleMessage.AddRange(getBytes(Buf, 0, read)) 'Ersten Chunk lesen
    Do While _Stream.DataAvailable 'Solange Daten im Stream warten
    read = _Stream.Read(Buf, 0, Buf.Length) 'Lese Stream von aktueller Position aus
    finaleMessage.AddRange(getBytes(Buf, 0, read)) 'Der der gesamten Byteabfolge den jetzt gelesen Chunk hinzufügen
    Loop

    Lieber nicht :D
    @n1nja: Sende einfach erstmal die Länge der Daten die du sendest, dann erstellst du ein Byte-Array mit der größe, du kannst es trotzdem noch Paketweise auslesen, dafür gibt es ja das ganze Offset Zeugs.

    Außerdem kann das ja nur an deiner Verschlüsselung/Entschlüsselung liegen, wenn beliebiger Text ohne Verschlüsselung korrekt übertragen wird. Deshalb sollte man diese Funktionen kennen um genaueres zu sagen
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    schockerjo schrieb:

    Dim finaleMessage As New List(Of Byte)
    finaleMessage.AddRange(getBytes(Buf, 0, read)) 'Ersten Chunk lesen
    Do While _Stream.DataAvailable 'Solange Daten im Stream warten
    read = _Stream.Read(Buf, 0, Buf.Length) 'Lese Stream von aktueller Position aus
    finaleMessage.AddRange(getBytes(Buf, 0, read)) 'Der der gesamten Byteabfolge den jetzt gelesen Chunk hinzufügen
    Loop

    Lieber nicht :D


    Währe cool, wenn du mir erklären könntest warum :)

    MFG
    Wegen dem unnötigen Bytes hinundherkopieren nehmen wir mal an es kommt die ganze Zeit in 64 Bytes häppchen an und man will 1 GB übetragen, dann ist das ziemlich viel Arbeit speicher neu reservieren Daten kopieren usw. Und jedesmal werden mehr Daten kopiert, wenn die Listengröße verdoppelt werden muss.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---