CS:GO Rcon Tool (mit Winsock dotNet) beendet sich

  • VB.NET
  • .NET (FX) 4.5–4.8

    CS:GO Rcon Tool (mit Winsock dotNet) beendet sich

    Hallo,

    ich habe heute ein kleines Tool geschrieben, mit dem man an einen CSGO-Server Rcon Befehle senden kann. Genauer genommen liegt da das Problem, denn im Moment kann man sich verbinden und danach anmelden. Zum anmelden sendet man den ersten Befehl. Wenn ich jetzt einen zweiten Befehl senden möchte, beendet sich der Winsock ohne einen Fehler auszugeben.
    Ich habe bereits mit Wireshark nachgesehen, was da so hin und her gesendet wird und der Login ist erfolgreich. Wenn man anschließend den Befhel sendet, wird er auch erfolgreich gesendet. Nur danach ist ohne Fehler oder so einfach Ende :/

    Meine bisherige Vermutung ist, dass irgendwas mit dem gesendeten nicht zu 100% hinkommt, da am Ende der gesendeten Nachrichten immer eine "04" steht (siehe Wireshark), die ich nirgends eingefügt habe.

    Source RCON Protokol: developer.valvesoftware.com/wiki/Source_RCON_Protocol
    Winsock dotNet: codeproject.com/Articles/11422/Winsock-NET

    Wireshark-Ausgabe:
    Spoiler anzeigen

    Quellcode

    1. 00000000 14 00 00 00 01 00 00 00 03 00 00 00 67 6f 6f 64 ........ ....good
    2. 00000010 70 61 73 73 77 64 00 00 04 passwd.. .
    3. 00000000 0a 00 00 00 01 00 00 00 00 00 00 00 00 00 ........ ......
    4. 0000000E 0a 00 00 00 01 00 00 00 02 00 00 00 00 00 ........ ......
    5. 00000019 13 00 00 00 00 00 00 00 02 00 00 00 73 61 79 20 ........ ....say
    6. 00000029 48 65 6c 6c 6f 00 00 04 Hello...


    Mein Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports Winsock_Control
    2. Public Class Main
    3. Dim srvAddress() As String
    4. Dim WithEvents WinSock As New Winsock
    5. Dim Packet As String
    6. Dim Data As String
    7. Private Sub bConnect_Click(sender As Object, e As EventArgs) Handles bConnect.Click
    8. bConnect.Enabled = False
    9. tbAdress.Enabled = False
    10. tbPassword.Enabled = False
    11. If tbAdress.Text = vbNullString Or tbPassword.Text = vbNullString Then
    12. MsgBox("Bitte gebe eine Server-Adresse und ein Passwort ein", MsgBoxStyle.Exclamation, "CS:GO Rcon-Tool")
    13. tbAdress.Focus()
    14. ElseIf tbAdress.Text.Contains(":") = False Then
    15. MsgBox("Ungültige Server-Adresse! (Adresse:Port)" + vbNewLine + "111.222.333.444:12345", MsgBoxStyle.Exclamation, "CS:GO Rcon-Tool")
    16. Else
    17. srvAddress = tbAdress.Text.Split(":")
    18. WinSock = New Winsock
    19. With WinSock
    20. .RemoteIP = srvAddress(0)
    21. .RemotePort = srvAddress(1)
    22. .Connect()
    23. End With
    24. End If
    25. End Sub
    26. Private Sub SendAuth(ByVal password As String)
    27. ' Packet ID (immer 0)
    28. Packet = Chr(0) & Chr(0) & Chr(0) & Chr(0)
    29. ' Packet Type (3 = AUTH)
    30. Packet = Packet & Chr(3) & Chr(0) & Chr(0) & Chr(0)
    31. ' Packet Body
    32. Packet = Packet & password
    33. ' Body End (1 Null String + \0...)
    34. Packet = Packet & Chr(0) & Chr(0)
    35. ' Absenden und Länge am Anfang ergänzen
    36. WinSock.Send(Chr(Len(Packet)) & Chr(0) & Chr(0) & Chr(0) & Packet)
    37. End Sub
    38. Private Sub SendCommand(ByVal command As String)
    39. ' Packet ID (immer 0)
    40. Packet = Chr(0) & Chr(0) & Chr(0) & Chr(0)
    41. ' Packet Type (2 = EXEC_COMMAND)
    42. Packet = Packet & Chr(2) & Chr(0) & Chr(0) & Chr(0)
    43. ' Packet Body
    44. Packet = Packet & command
    45. ' Body End (1 Null String + \0...)
    46. Packet = Packet & Chr(0) & Chr(0)
    47. ' Absenden und Länge am Anfang ergänzen
    48. WinSock.Send(Chr(Len(Packet)) & Chr(0) & Chr(0) & Chr(0) & Packet)
    49. End Sub
    50. Private Sub WinSock_DataArrival(sender As Winsock, BytesTotal As Integer) Handles WinSock.DataArrival
    51. 'RichTextBox1.Text = RichTextBox1.Text & vbCrLf & "Empfange " & BytesTotal & " Bytes von " & sender.RemoteIP
    52. MsgBox(BytesTotal)
    53. End Sub
    54. Private Sub bAuth_Click(sender As Object, e As EventArgs) Handles bAuth.Click
    55. SendAuth(tbPassword.Text)
    56. End Sub
    57. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    58. SendCommand("say Hello")
    59. End Sub
    60. Private Sub WinSock_HandleError(sender As Winsock, Description As String, Method As String, myEx As String) Handles WinSock.HandleError
    61. MsgBox(Description, MsgBoxStyle.Exclamation, "CS:GO Rcon-Tool")
    62. End Sub
    63. Private Sub WinSock_StateChanged(sender As Winsock, state As WinsockStates) Handles WinSock.StateChanged
    64. MsgBox(state.ToString)
    65. End Sub
    66. End Class


    Ich hoffe, es weiss jemand, wo das Problem liegt.

    Mit freundlichen Grüßen
    NotifierMan