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
Mein Code:
Spoiler anzeigen
Ich hoffe, es weiss jemand, wo das Problem liegt.
Mit freundlichen Grüßen
NotifierMan
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:
Quellcode
- 00000000 14 00 00 00 01 00 00 00 03 00 00 00 67 6f 6f 64 ........ ....good
- 00000010 70 61 73 73 77 64 00 00 04 passwd.. .
- 00000000 0a 00 00 00 01 00 00 00 00 00 00 00 00 00 ........ ......
- 0000000E 0a 00 00 00 01 00 00 00 02 00 00 00 00 00 ........ ......
- 00000019 13 00 00 00 00 00 00 00 02 00 00 00 73 61 79 20 ........ ....say
- 00000029 48 65 6c 6c 6f 00 00 04 Hello...
Mein Code:
VB.NET-Quellcode
- Imports Winsock_Control
- Public Class Main
- Dim srvAddress() As String
- Dim WithEvents WinSock As New Winsock
- Dim Packet As String
- Dim Data As String
- Private Sub bConnect_Click(sender As Object, e As EventArgs) Handles bConnect.Click
- bConnect.Enabled = False
- tbAdress.Enabled = False
- tbPassword.Enabled = False
- If tbAdress.Text = vbNullString Or tbPassword.Text = vbNullString Then
- MsgBox("Bitte gebe eine Server-Adresse und ein Passwort ein", MsgBoxStyle.Exclamation, "CS:GO Rcon-Tool")
- tbAdress.Focus()
- ElseIf tbAdress.Text.Contains(":") = False Then
- MsgBox("Ungültige Server-Adresse! (Adresse:Port)" + vbNewLine + "111.222.333.444:12345", MsgBoxStyle.Exclamation, "CS:GO Rcon-Tool")
- Else
- srvAddress = tbAdress.Text.Split(":")
- WinSock = New Winsock
- With WinSock
- .RemoteIP = srvAddress(0)
- .RemotePort = srvAddress(1)
- .Connect()
- End With
- End If
- End Sub
- Private Sub SendAuth(ByVal password As String)
- ' Packet ID (immer 0)
- Packet = Chr(0) & Chr(0) & Chr(0) & Chr(0)
- ' Packet Type (3 = AUTH)
- Packet = Packet & Chr(3) & Chr(0) & Chr(0) & Chr(0)
- ' Packet Body
- Packet = Packet & password
- ' Body End (1 Null String + \0...)
- Packet = Packet & Chr(0) & Chr(0)
- ' Absenden und Länge am Anfang ergänzen
- WinSock.Send(Chr(Len(Packet)) & Chr(0) & Chr(0) & Chr(0) & Packet)
- End Sub
- Private Sub SendCommand(ByVal command As String)
- ' Packet ID (immer 0)
- Packet = Chr(0) & Chr(0) & Chr(0) & Chr(0)
- ' Packet Type (2 = EXEC_COMMAND)
- Packet = Packet & Chr(2) & Chr(0) & Chr(0) & Chr(0)
- ' Packet Body
- Packet = Packet & command
- ' Body End (1 Null String + \0...)
- Packet = Packet & Chr(0) & Chr(0)
- ' Absenden und Länge am Anfang ergänzen
- WinSock.Send(Chr(Len(Packet)) & Chr(0) & Chr(0) & Chr(0) & Packet)
- End Sub
- Private Sub WinSock_DataArrival(sender As Winsock, BytesTotal As Integer) Handles WinSock.DataArrival
- 'RichTextBox1.Text = RichTextBox1.Text & vbCrLf & "Empfange " & BytesTotal & " Bytes von " & sender.RemoteIP
- MsgBox(BytesTotal)
- End Sub
- Private Sub bAuth_Click(sender As Object, e As EventArgs) Handles bAuth.Click
- SendAuth(tbPassword.Text)
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- SendCommand("say Hello")
- End Sub
- Private Sub WinSock_HandleError(sender As Winsock, Description As String, Method As String, myEx As String) Handles WinSock.HandleError
- MsgBox(Description, MsgBoxStyle.Exclamation, "CS:GO Rcon-Tool")
- End Sub
- Private Sub WinSock_StateChanged(sender As Winsock, state As WinsockStates) Handles WinSock.StateChanged
- MsgBox(state.ToString)
- End Sub
- End Class
Ich hoffe, es weiss jemand, wo das Problem liegt.
Mit freundlichen Grüßen
NotifierMan