TCP Send - Hexadezimal Werte

  • Ja, ich habe mit WPE Pro (einem Packet Sniffer) Pakete eines Programmes abgefangen.

    Dieses sendet "00 80 63 79 0B 9F 9C 0C 27 35" an einen Server und erhält anschließend ein Paket in der Form:

    "04 00 58 69 61 6E B9 0B B8 0B 01 01 4A 00 04 00 41 65 67 65 BB 0B B8 0B 01 01 4C 00 04 00 54 72 6F 79 BB 0B B8 0B 01 01 5E 00 06 00 41 74 68 65 6E 73 BA 0B B8 0B 01 01 60 00 05 00 4F 61 73 69 73 BC 0B B8 0B 01 01 66 00 [...]"

    Dieses Paket würde mir eine Auskunft über die Server Auslastung geben.

    Jedoch weiß ich nicht, wie ich mit TCPSend die Anfrage übermitteln kann und mit TCPRecieve die Hexwerte übermittelt bekomme.

    Versende ich den Hex Wert als String, bekomme ich lediglich "%" vom Server als Antwort und das ist auch nicht mein gewünschtes Ergebnis.

    Wäre nett, wenn mir jemand helfen könnte. ;)

    • Offizieller Beitrag

    Tut mir leid aber ich reagiere immer etwas allergisch wenn jemand mit Packet Sniffern etwas ausspioniert und dann auch um Hilfe bitte mit diesen gewonnen Daten etwas zu manipulieren, zumal die Daten die Du zurückbekommen hast die Namen von fünf Silkroad-Servern enthält!

  • Zitat

    Original von bernd670
    Tut mir leid aber ich reagiere immer etwas allergisch wenn jemand mit Packet Sniffern etwas ausspioniert und dann auch um Hilfe bitte mit diesen gewonnen Daten etwas zu manipulieren, zumal die Daten die Du zurückbekommen hast die Namen von fünf Silkroad-Servern enthält!

    tut das was zur Sache?

    Damit ermittle ich den Server Traffic.

    • Offizieller Beitrag
    Zitat

    Original von TurboCal

    tut das was zur Sache?

    Damit ermittle ich den Server Traffic.

    LOL

    Ja, tut es. Was ist der Sinn von Packet Sniffern ?? - Traffic ermitteln ? Ich schmeiß mich weg.
    Mag sein, das dies eine Möglichkeit zur Trafficermittlung ist. Aber sicher nicht die einzige und somit die erste die durchs Sieb fällt.

  • Zitat

    Original von BugFix

    LOL

    Ja, tut es. Was ist der Sinn von Packet Sniffern ?? - Traffic ermitteln ? Ich schmeiß mich weg.
    Mag sein, das dies eine Möglichkeit zur Trafficermittlung ist. Aber sicher nicht die einzige und somit die erste die durchs Sieb fällt.

    Der Silkroad Login Server übermittelt mir den Status der einzelnen Server.

    BA 0B B8 0B 01 01 4A 00 04 00

    BA = aktuelle Zahl auf dem Server
    B8 = maximale

    Maximale liegt bei 3000

    3002 sind auf dem Server

    Man kann sich nicht einloggen, da kein Platz auf dem Server ist.

    Wenn ihr mir nicht helfen wollt, dann verzichte ich gerne auf eure Hilfe.
    Auf silkroadforen wie 0x33 wird einem eher geholfen.

  • man ist hier einfach vorsichtig und will nunmal illegales vermeiden und nicht unterstützen

    • Offizieller Beitrag

    Hi!

    Es ist hier (wie überall) so, dass man von Anfang an mit offenen Karten spielen muss, wenn man geholfen haben will. Das hast du hier nicht vollständig gemacht, daher halte ich die Reaktionen für nachvollziehbar.

    Musst du eine Funktion, die Silkroad an sich schon hat, in dein Skript einbauen? Glaubst du, dass die Server nicht merken, wenn jemand keine komplette Kommunikation abwickelt, sondern immer nur den Status abfragt? Glaubst du es ist hilfreich zu behaupten, woanders gäbe es bessere Hilfe gesetzt die Tatsache, dass du hier gefragt hast?

    peethebee

  • Ich habe hier gefragt, da ich gedacht habe, mir würde hier geholfen.

    http://www.rev6.com/index.php?site=servers

    bietet eine sich aktualisierende Liste mit den aktuellen Serverbelegungen.

    Gleichzeitig wird eine Computer Version angeboten, die sich die Daten selbst beim Login Server holt.

    (gibt es hier:
    http://rapidshare.com/files/35534765/ServerList.rar
    )

    Da ich nicht dieses Programm automatisieren möchte, sondern selbst mit Packets zu arbeiten viel komfortabler wäre, hab ich diesen Thread erstellt.

    Wenn man an ein Projekt geht, ist es erstmal wichtig Informationen zu sammeln, weshalb ich WPE Pro genutzt hatte um die Pakete dieses Programmes abzufangen. (versteh nicht, was daran falsch sein sollte?!)

    Nach dem ich nun erkannt hatte, welche Teile des empfangenen Paketes für die aktuelle Userzahl Zuständig ist, wollte ich das dementsprechend in meinem Script nutzen.

    Es soll einfach den Login Server nach den Server Stats abfragen, und sobald ein Platz auf dem Server ist, für mich auf einloggen klicken.

    Nun wollte ich einfach nur fragen, auf welche Art ich mit TCPSend das Paket an den Server schicken soll - in form von hex als z.B. "A44F6E"...
    oder als string oder was weiß ich als was.

  • vielleicht hilft mein momentaner SourceCode:

    Spoiler anzeigen
    [autoit]

    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $IP = "121.128.133.26"
    Global Const $PORT = 15779

    [/autoit] [autoit][/autoit] [autoit]

    $sendmich = "00808A0689F897E72665"

    [/autoit] [autoit][/autoit] [autoit]

    TCPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    $tcp_Connect = TCPConnect($IP, $PORT)

    [/autoit] [autoit][/autoit] [autoit]

    While $tcp_Connect = -1
    $tcp_Connect = TCPConnect($IP, $PORT)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Global $serverIP = SocketToIP($tcp_Connect)

    [/autoit] [autoit][/autoit] [autoit]

    TCPSend($tcp_Connect,$sendmich)

    [/autoit] [autoit][/autoit] [autoit]

    $recv = TCPRecv($tcp_Connect,2048)

    [/autoit] [autoit][/autoit] [autoit]

    While $recv = ""
    $recv = TCPRecv($tcp_Connect,2048)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"kk", $recv)

    [/autoit] [autoit][/autoit] [autoit]

    Func SocketToIP ($SHOCKET)
    Local $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

    [/autoit] [autoit][/autoit] [autoit]

    Local $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, "ptr", DllStructGetPtr($sockaddr), "int_ptr", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $sockaddr = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit]

    Einmal editiert, zuletzt von TurboCal (10. Juni 2007 um 21:26)

    • Offizieller Beitrag

    So wie Du es geschrieben hast wird ein String mit der Zeichenfolge gesendet (= 20 Zeichen), einfach mal ein 0x an den Anfang schreiben dann sollte es eigentlich als Hex-Code gesendet werden (= 10 Zeichen).

    $sendmich = "0x00808A0689F897E72665"

    btw wenn man Packet Sniffer einsetzt ohne das das "Opfer" darüber informiert ist und dem zugestimmt hat, ist dieser Einsatz strafbar! Darum bin bei solchen sachen immer etwas vorsichtig. ;)


    Edit: Wenn es nicht funktioniert könnte man als alternative die Tabelle auf http://www.rev6.com/index.php?site=servers mit ie.au3 auslesen und auswerten.

  • hab die pakete mal abgefangen und er schickt dann genau die hier im string:

    0x00808A0689F897E72665

    demnach werd ich wohl den hex in einen String umwandeln müssen^^

    • Offizieller Beitrag

    Lies doch einfach die Website aus, dann hast du alle Serverinformationen.
    Leg das in eine Schleife mit Zeitintervall nach deinem Geschmack.

    [autoit]

    #include <array.au3>
    #include <INet.au3>
    Dim $url = 'http://www.rev6.com/index.php?site=servers'
    Dim $pattern = "((?<=bgcolor=#800000>)[a-zA-Z0-9]*(?=</td><td))"
    Dim $arServer[1][4], $n = 0

    [/autoit][autoit][/autoit][autoit]

    $source = _INetGetSource($url)
    $ret = StringRegExp($source, $pattern, 3)
    If IsArray($ret) Then
    $anz = UBound($ret)/4
    ReDim $arServer[$anz][4]
    For $i = 0 To UBound($arServer)-1
    $arServer[$i][0] = $ret[$n]
    $n += 1
    $arServer[$i][1] = $ret[$n]
    $n += 1
    $arServer[$i][2] = $ret[$n]
    $n += 1
    $arServer[$i][3] = $ret[$n]
    $n += 1
    Next
    _ArrayDisplay($arServer)
    EndIf

    [/autoit]
  • So etwas hatte ich bereits geschrieben, die Seite ist aber leider nicht immer up to date und der Service nicht immer verfügbar.

    Mit

    $sendmich = _HexToString("00808A0689F897E72665")

    Sendet er zumindestens jetzt die richtigen Pakete.

    Kommt nur was falsches zurück :P

    Ich guck mal bissel weiter...

    • Offizieller Beitrag

    Hi,
    ich habe meinen Vorschlag mal im 20 Sekunden Takt über mehrere Stunden laufen lassen.
    Ergebnisse als TrayTip. Lief absolut problemlos.

    Nützt natürlich nichts, sollte die Seite off sein. Ansonsten denke ich, eine gute Alternative.

    Spoiler anzeigen
    [autoit]

    #include <INet.au3>
    Dim $url = 'http://www.rev6.com/index.php?site=servers'
    Dim $pattern = "((?<=bgcolor=#800000>)[\w]*(?=</td><td))"
    Dim $arServer[1][4], $n, $str
    HotKeySet("^+e", "ende") ; Strg+Shift+e zum Beenden

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $source = _INetGetSource($url)
    $ret = StringRegExp($source, $pattern, 3)
    $n = 0
    $str = ''
    If IsArray($ret) Then
    $anz = UBound($ret)/4
    ReDim $arServer[$anz][4]
    For $i = 0 To UBound($arServer)-1
    $arServer[$i][0] = $ret[$n]
    $n += 1
    $arServer[$i][1] = $ret[$n]
    $n += 1
    $arServer[$i][2] = $ret[$n]
    $n += 1
    $arServer[$i][3] = $ret[$n]
    $n += 1
    If $arServer[$i][1] < $arServer[$i][2] Then _
    $str &= $arServer[$i][0] & @TAB & ' | ' & $arServer[$i][1] & @TAB & _
    ' | ' & $arServer[$i][2] & @LF
    Next
    EndIf
    TrayTip("Freie Server", $str, 5)
    Sleep(5000)
    TrayTip('','',1)
    Sleep(15000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func ende()
    Exit
    EndFunc

    [/autoit]

    Edit: Sollte kein freier Server vorhanden sein, erscheint kein TrayTip.

  • Hab jetzt mal das Programm automatisiert, das ich oben gepostet hatte.

    Ist schon ein Schritt effizienter als die Daten von der Seite zu holen.

    Am effizientesten wäre jedoch die Daten selbst vom Einloggserver zu bekommen^^ ;)