Bräuchte Hilfe ein Script zu verstehen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
m4rty
User
Beiträge: 3
Registriert: Samstag 2. Januar 2016, 17:21

Hallo,

ich bin vollkommen unwissend, wie man mit dieser Programmierung umgeht. Ich habe versucht mich auf die Schnelle einzulesen, aber festgestellt, dass es mit der "auf die Schnelle" nicht ganz so klappt :(

Jedenfalls habe ich im Netz nach einer Möglichkeit gesucht Battle Eye Guid's in Steam ID's zu konvertieren.
Ich weiss nicht, ob es jemanden was sagt, bei Fragen kann ich gerne näher drauf eingehen.

Kurzfassung: Aus einer Guid wie z.B.: 27aeaaf284448bb0ebb5526726e5ac1e soll eine Stem ID generiert werden: 76561197989462866

Nun hab ich jemanden gefunden, der dazu ein Script (python 2.7) geschrieben hatte: https://www.dropbox.com/s/xy51e05hhtbwc ... 64.py?dl=0

Leider weiss ich damit gar nichts anzufangen :cry:

Sagt vielleicht jemandem dies etwas? Wie kann ich es benutzen? Irgendwo müsste ich die eine GUID eintippen und eine ID müsste raus kommen.
Wie aber??


Danke im Voraus und Gruß

M4rty
BlackJack

@m4rty: Der Autor war doch so freundlich seine E-Mail-Adresse in den Quelltext zu schreiben. Da hättest Du nachfragen können wie man sein Programm verwendet.

Da es aus Pythonista-Sicht ziemlich gruselig aussieht habe ich es mal in ”echtem” Python neu geschrieben:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
from collections import namedtuple
from datetime import datetime as DateTime
from hashlib import md5


def reversed_long_range(start, end):
    while start < end:
        end -= 1
        yield end


class Player(namedtuple('Player', 'guid steam_id note')):

    def __str__(self):
        return '{0.guid} {0.steam_id} {0.note}'.format(self)


def log(prefix, suffix=''):
    # 
    # TODO: Replace with `logging`.
    # 
    print(
        '{0} {1:%Y-%m-%d %H:%M:%S} {2}'.format(prefix, DateTime.now(), suffix)
    )


def steam_id_to_guid(steam_id):
    temp = ['BE']
    for _ in xrange(8):
        temp.append(chr(steam_id & 0xFF))
        steam_id >>= 8
    return md5(''.join(temp)).hexdigest()


def iter_players(filename):
    with open(filename) as lines:
        for line in lines:
            yield Player(line[:32], None, line[32:])


def brute_force(guid2player, first_steam_id, last_steam_id):
    for steam_id in reversed_long_range(first_steam_id, last_steam_id + 1):
        guid = steam_id_to_guid(steam_id)
        try:
            player = guid2player.pop(guid)
        except KeyError:
            pass
        else:
            log('Found at:', ' {0} {1}'.format(guid, steam_id))
            yield player._replace(steam_id=steam_id)
            if not guid2player:
                break
        

def print_players(players, label):
    print(label)
    for player in players:
        print(player)


def main():
    first_steam_id = 76561197900000000
    last_steam_id = 76561198300000000

    log('Start:')
    # File must contain one or more GUIDs. One guid per line
    guid2player = dict(
        (player.guid, player)
        for player in iter_players('GUIDs.txt')
    )
    decoded_players = sorted(
        brute_force(guid2player, first_steam_id, last_steam_id)
    )

    log('End:')
    print_players(sorted(guid2player.itervalues()), 'Coded list:')
    print_players(decoded_players, 'Decoded list:')


if __name__ == '__main__':
    main()
Die GUIDs müssen in einer Datei mit dem Namen `GUIDs.txt` stehen. Eine pro Zeile. Hinter der GUID darf auf der Zeile noch Text stehen, zum Beispiel ein Benutzername oder eine Notiz.
m4rty
User
Beiträge: 3
Registriert: Samstag 2. Januar 2016, 17:21

Vielen Dank für das bereinigen des Scripts und die Hilfe :)

Problem ist mit der direkten Kontaktaufnahme, dass ich dieses Script von einem Mod über ein Forum bekommen habe. Er selber hat es von einem Kollegen aus USA, der es ihm geschrieben hatte. Bei meinen Englischkenntnissen würde ich nicht sehr weit bei ihm kommen :(

Habe nun eine GUIDs.txt Datei mit einer GUID erstellt und mit der .Scriptdatei (.py) in einen Ordner gepackt.
Dann das Script über die Python Shell gestartet:

Dies wird ausgegeben:


Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
Start: 2016-01-04 23:10:32



Hmm, wo sollte denn nun die ID ausgegeben werden?


Danke im Voraus.
BlackJack

@m4rty: Auch dort. Du musst Geduld haben, da werden ja stur Möglichkeiten durchprobiert in der Hoffnung dass die richtige dabei ist. „Brute force“ halt.
m4rty
User
Beiträge: 3
Registriert: Samstag 2. Januar 2016, 17:21

Wow Super....
Stimmt, hat geklappt.

Vielen DANK!!
Antworten