1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Andy

Beiträge von Andy

  • Hackersimulation schreiben

    • Andy
    • 16. Oktober 2009 um 14:08

    Das "Problem" ist einfach nur die blöde Darstellung in der Dosbox. Je mehr dargestellt wird, dest mehr flackert es.

    Zitat

    ne eigene gui im cmd-stil (oder ein cmd fenster worüber ein anderes fenster liegt.

    dann macht man das mit GDI+ und hat den ganzen Ärger nicht^^

    Viele "fallende Buchstaben " sind ziemlich einfach zu realisieren. Also nicht nur einer wie im Beispiel.
    Einfach die 25 Zeilen in ein Array packen und immer nur "weiterschieben". So muss nur nur die "oberste" Zeile neu gemacht werden. Die letzte fällt dann hinten raus.
    ...wär ja mal ne Idee^^

    sc4ry,

    Zitat

    wenn ich das mit m=1 ausfähre, ist es korrekt (3,73 sek).

    hmmm, läuft bei mir in beiden Fällen....check das mal bitte, werden Takt und Anzahl der Kerne richtig erkannt? Eigentlich wird ja nur die bisher benötigte Zeit abgefragt...siehst du ja selbst. Eigentlich wollte ich das schon bissl länger laufen lassen, so 30-40 Sekunden, dann kommt die "Geschwindigkeit" bei schnellen Rechnern besser raus^^
    Pass doch einfach mal bei $sleep= die 2000 an, ggf mal 5000 oder so...
    Hab noch nen 1,2Ghz P3, der rackert ganz schön, :rofl::rofl: Bei 4 gleichzeitig in jeweils einer Dosbox laufenden Simulation hat der immer noch 0% Prozessorlast :thumbup:

  • ControlGetFocus - Geht das auch mit dem Maus Fokus?

    • Andy
    • 16. Oktober 2009 um 13:14

    Hi,

    [autoit]

    GUIGetCursorInfo ()

    [/autoit]

    gibt ein Array mit einigen Daten zurück, dort ist auch die ID des aktuell unter dem Mauscursor befindlichen Controls.
    ciao
    Andy

  • HTML Seite im Vollbildmodus anzeigen

    • Andy
    • 16. Oktober 2009 um 13:10
    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <IE.au3>
    HotKeySet("{ESC}","Kill")
    Global Const $WS_EX_COMPOSITED = 0x02000000
    $gui = GUICreate("",300,300,0,0, BitOR($WS_SIZEBOX, $WS_POPUPWINDOW, $WS_CLIPCHILDREN), BitOR($WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED));Erstellt ein GUI
    GUISetState();Macht es sichtbar
    GUISetState(@SW_MAXIMIZE);maximiert es, und...

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

    $GUISize = WinGetPos($gui) ;fragt pos. und grösse deines Fensters ab
    ;~ $GUISize[0] wäre x-position
    ;~ $GUISize[1] wäre y-position
    ;~ $GUISize[2] wäre breite
    ;~ $GUISize[3] wäre höhe
    $eIE = _IECreateEmbedded()
    GUICtrlCreateObj($eIE, $GUISize[0], $GUISize[1], $GUISize[2], $GUISize[3])
    _IENavigate($eIE,"www.google.de")
    Func Kill()
    Exit
    EndFunc

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

    While 1
    sleep(200)
    WEnd

    [/autoit]
  • Zeilenumbruch bei StringSplit

    • Andy
    • 16. Oktober 2009 um 12:59

    Hi,
    also ich verstehe ehrlich gesagt das Problem nicht. Wenn du den Inhalt der Zwischenablage in Scite lädst und bei Ansicht die Leerzeichen und Zeilenumbrüche sichtbar machst, dann siehst du die wenigstens schon mal. Anhand dessen kannst du splitten.
    Dein Beispieltext jedenfalls funktioniert bei mir einwandfrei. Allerdings wird in deinem Text viel mit Tabulatoren gearbeitet, kann sein, dass diese Tabs von anderen Anzeigen nicht richtig ausgewertet bzw in Leerzeichen umgewandelt werden ( Msgbox? ) . Dem Stringsplit müsste das aber egal sein....
    ciao
    Andy

  • Mouseclicks in nicht aktiven bzw minimieren Anwendungen...

    • Andy
    • 16. Oktober 2009 um 12:46

    Hallo,
    genausowenig, wie man in nicht "existenten"(sichtbaren) Fenstern per Pixelsearch suchen kann, kann man dort auch "hinklicken". Eine Möglichkeit besteht darin, an ein Programm (ob minimiert/maximiert, versteckt usw. ist dabei egal) eine NACHRICHT zu schicken.
    Wenn aber ein Programm keine Controls benutzt, an die man eine Nachricht senden kann, dann ist es auch nicht möglich die Nachricht auszuwerten. Daher funktioniert bei einigen Programmen _MouseClickPlus() und bei anderen eben nicht.

    Zitat

    Habe mit der unteren Funktion schon geschaft das er in einem nicht aktiven Paint einen Farbpunkt zeichnet

    Ja, nicht aktiv heisst ja nicht, dass Paint keine Nachrichten empfangen kann. Nur welcher Programmierer würde in einem Programm, dass nun mal primär zum Zeichnen gedacht ist, eine Funktion vorsehen die im minimierten Zustand (wenn das Programm aus Sicht des Programmierers ohne Nutzwert ist) erlaubt auf die "Zeichenfläche" zu malen obwohl diese überhaupt nicht sichtbar ist? Wer macht so etwas und warum?
    Einem Control (z.B. ein Button) ist das völlig egal, das liegt als Nummer in irgendeiner Liste gaaanz tief unten im Windows vergraben und ist mit der Nachrichtenkette verknüpft. Völlig egal ob das Fenster sichtbar ist oder nicht, ob mit der Maus, der Tastatur oder einem Send()-Befehl die Nachricht generiert wird, die Liste wird abgeklappert, die Nachricht wird vom Control registriert und die damit verknüpfte Funktion aufgerufen....
    Auf der einen Seite beschwert sich die Leute, dass Windows so lahmars****ig ist, aber auf der anderen Seite wollen sie daß Funktionen in Programme eingebaut (und zigmal in der Sekunde abgefragt) werden, die von der Mehrzahl der User NIE abgefragt werden...

    ciao
    Andy

  • Hackersimulation schreiben

    • Andy
    • 16. Oktober 2009 um 01:06

    Hi, habs mal mit "Matrix"-Code gemacht....fallende Buchstaben und so^^
    Die EXE als DOS-Programm ist mit Hilfetext, einfach mit /h oder /? aufrufen in der Dosbox. Man kann auch noch einiges einstellen^^

    Fenstergröße der Dosbox sollte auf 80x25 eingestellt sein (ist Standard)

    Das Script ermittelt den Prozessortakt und die Anzahl der Kerne :D und aus dem daraus resultierenden Faktor macht blablub.....interessiert eh keinen 8o
    Starten, ablachen :rofl:

    Btw, läuft auch in Scite, sieht aber dort bei weitem besser aus, wer echtes Uraltfeeling haben will, sollte mal die Dosbox testen, geflacker vom feinsten.....

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=Simulation.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Array.au3>
    #include <String.au3>
    #include <Misc.au3>
    ;~ Das Alles So Lassen
    ;~ Also Nichts Ändern

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

    $sKennwort = "Weist du Nicht!"; <-- Das "Fake"- Kennwort
    $matrixmode = 0
    If $cmdline[0] <> 0 Then
    ; _ArrayDisplay($cmdline)
    For $i = 1 To $cmdline[0] ;alle parameter durchgehen
    If StringLeft($cmdline[$i], 3) = "/p=" Then ;passwort gesetzt
    $sKennwort = StringTrimLeft($cmdline[$i], 3)
    EndIf

    If StringLeft($cmdline[$i], 3) = "/m=" Then ;Matrixmodus gesetzt
    $matrixmode = Int(Number(StringTrimLeft($cmdline[$i], 3)))
    If $matrixmode < 0 Or $matrixmode > 1 Then $matrixmode = 0
    EndIf

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

    If StringLeft($cmdline[$i], 3) = "/h" Or StringLeft($cmdline[$i], 3) = "/?" Then ;passwort gesetzt
    ConsoleWrite("Parameter:" & @CRLF)
    ConsoleWrite(" /p=[Passwort] beliebiges Passwort eingeben" & @CRLF)
    ConsoleWrite(" /m=[0/1] 0 es faellt nur ein Buchstabe" & @CRLF)
    ConsoleWrite(" 1 es faellt eine Reihe mit Buchstaben" & @CRLF)
    ConsoleWrite(" /h oder /? dieser Hilfetext" & @CRLF & @CRLF)
    ConsoleWrite("Beispiel: Simulation.exe /m=0 /p=TestPassWort" & @CRLF)
    Exit
    EndIf
    Next

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

    EndIf

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

    $dll = DllOpen("user32.dll"); für _ispressed()

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

    $stars = _StringRepeat("*", StringLen($sKennwort)) ;Kennwort mit Sternchen auffüllen
    $leerstring = _StringRepeat(" ", StringLen($sKennwort))
    $anzahlsternchen = StringLen($stars)
    $stars1 = $stars

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

    $dosboxzeilen = 25 + 1

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

    ;Taktfrequenz des Prozessors holen, je schneller, desto schneller "knackt" der Rechner das PW!
    ; by Oscar
    $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $prozessor = $objItem.Name
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $prozessor = ' & $prozessor & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    $takt = $objItem.CurrentClockSpeed / 1000 ;Mhz
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $takt = ' & $takt & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    Next
    EndIf

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

    $dual = StringReplace($prozessor, "dual", "Dual") ;2 Prozessorkerne
    $dual = @extended * 2
    $trio = StringReplace($prozessor, "X3", "X3"); 3 Prozessorkerne
    $trio = @extended * 3
    $quad = StringReplace($prozessor, "quad", "Quad"); 4 Prozessorkerne
    $quad = @extended * 4
    $faktor=1 ;ein Prozessorkern sollte vorhanden sein.....
    $Faktor = $dual + $trio + $quad ;bissl dick auftragen muss sein^^

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

    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $faktor = ' & $faktor & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $sleep = 2000 / $takt / $Faktor ;Wartezeit in ms
    $sleeptime = 50
    $timer = TimerInit()

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

    ConsoleWrite(@CRLF & @CRLF & @CRLF)
    ConsoleWrite("--------------------------------------------------------------------" & @CRLF)
    ConsoleWrite("Das Passwort dieses Computers wird nun mittels der MATRIX-Methode entschlüsselt!" & @CRLF)
    ConsoleWrite("Prozessor mit : " & $takt & " Mhz und " & $Faktor & " Kernen" & @CRLF)
    ConsoleWrite("Drücken Sie bitte die Leertaste, um das Passwort zu entschlüsseln..." & @CRLF)
    ConsoleWrite("--------------------------------------------------------------------" & @CRLF)
    While 1
    If _IsPressed("20", $dll) Then ExitLoop
    If _IsPressed("0D", $dll) Then
    ConsoleWrite("Die Leertaste ist die lange Taste unten an der Tastatur, auf der KEINE " & @CRLF & "Buchstaben stehen!" & @CRLF)
    ConsoleWrite("Das üben wir nochmal...zur Strafe 10 Sekunden warten!" & @CRLF)
    Sleep(10000)
    ConsoleWrite("Dann probieren wir es nochmal...." & @CRLF & @CRLF)
    ConsoleWrite("Bitte die Leertaste drücken!" & @CRLF)
    EndIf

    WEnd

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

    While 1
    $pos = Random(1, StringLen($stars), 1) ;zufällige Position im String suchen und Buchstabe merken
    $stars = StringLeft($stars, $pos - 1) & StringMid($sKennwort, $pos, 1) & StringRight($stars, StringLen($stars) - $pos) ;Buchstabe an die richtige Position, Passwort "entschlüsseln"
    If $stars1 <> $stars Then ;wenn noch Sternchen im passwort sind , dann

    For $i = 1 To $dosboxzeilen ; Sternchen fallen lassen a la Matrix^^
    ConsoleWrite(@CRLF)
    If $matrixmode = 1 Then ;es fällt eine Reihe Buchstaben

    For $t = 1 To $i - 1
    $fallend = StringReplace($leerstring, $pos, Chr(64 + Random(1, 60, 1)))
    ConsoleWrite($fallend & @CRLF)
    Next

    Else ;es fällt nur ein Buchstabe
    For $t = 1 To $i - 2
    ConsoleWrite($leerstring & @CRLF)
    Next

    If $i < $dosboxzeilen Then
    $fallend = StringReplace($leerstring, $pos, Chr(64 + Random(1, 60, 1)))
    ConsoleWrite($fallend & @CRLF)
    EndIf
    EndIf

    For $t = $i To $dosboxzeilen - 2
    ConsoleWrite($leerstring & @CRLF)
    Next
    ;ConsoleWrite("***************** " & @CRLF)


    If $i = $dosboxzeilen Then
    $anzahlsternchen = StringReplace($stars, "*", "*") ; anzahl der Sternchen in @extended
    $anzahlsternchen = @extended
    ConsoleWrite($stars); & " bereits " & Int(100 - ($anzahlsternchen * 100 / StringLen($stars))) & "% geknackt nach " & StringFormat("%.2f", TimerDiff($t) / 1000) & " Sekunden! ")
    Sleep($sleeptime)
    Else
    ConsoleWrite($stars1)
    $sleeptime = $sleep - 20 * $i
    If $sleeptime < 30 Then $sleeptime = 30
    Sleep($sleeptime)
    EndIf
    Next

    ;~ For $i = 1 To StringLen($stars) - $anzahlsternchen ;Anzahl der Versuche...
    ;~ ConsoleWrite("#")
    ;~ Sleep($sleep) ; je schneller der Prozessor und je mehr Kerne, desto kürzer der Sleep
    ;~ Next
    Else
    If $stars = $sKennwort Then ExitLoop ;raus wenn passwort "geknackt"
    EndIf
    $stars1 = $stars ;altes passwort merken
    WEnd

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

    ConsoleWrite(@CRLF & @CRLF & "Password erfolgreich geknackt in " & StringFormat("%.2f", TimerDiff($timer) / 1000) & " Sekunden! " & @CRLF)
    ConsoleWrite(@CRLF & @CRLF & "Zum Anzeigen der Startparameter bitte das Programm mit /h oder /? aufrufen." & @CRLF & @CRLF)

    [/autoit]

    ciao
    Andy

  • Angekommen

    • Andy
    • 15. Oktober 2009 um 23:46

    Hallo und willkommen erstmal,

    Zitat

    Und in 20 Jahren darfst du dich dann um Mitgliedschaft bewerben.

    Dann isser immer noch ein "Jüngling" :rofl:
    aber in ca. 30 Jahren könnten wir drüber reden...ich vermute nur, dann ist es mir schnurz :thumbup:
    Ob es dann überhaupt noch Computer gibt wie wir sie kennen?
    Die Kids werden sich in 30 Jahren in ihrem Holodeck kugeln vor lachen, wenn du erzählst, dass du auf nem 24''-Monitor mit ner Pappbrille auf der Nase 3-D-Games gezockt hast....
    ...warten wirs ab....

  • WIN NEU-AB-RU Manager

    • Andy
    • 15. Oktober 2009 um 13:01
    Zitat

    aber brauche ich dieses Programm wirklich ???

    hmmm, ich hab da so nen bunten Button unten links in der Ecke vom Desktop, da steht "Start" drauf, der macht genau das selbe, und der bietet mir noch massig andere Auswahl-/Einstellungsmöglichkeiten....

  • RegExp Pattern.....

    • Andy
    • 15. Oktober 2009 um 12:48

    Wohl nicht die schnellste, aber einfachste komplett ohne Schleifen...

    [autoit]

    #include <Array.au3>
    #Include <string.au3>

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

    $Array = _StringBetween(fileread("logfile.log"), 'CN=', ',')
    $listviewitems=_arraytostring($array)
    GUICtrlCreateListViewItem($$listviewitems, $hListView) ;Ab damit in die listview

    [/autoit]
  • RegExp Pattern.....

    • Andy
    • 15. Oktober 2009 um 10:33

    Hi,
    hast du mal geschaut was GUICtrlCreateListViewItem() als "text" erwartet? Das Beispiel in der Hilfe zeigt einen STRING, bei dem die einzelnen Items durch ein Pipe getrennt sind, du übergibst der Funktion aber ein Array....
    ciao
    Andy

    /*EDIT*/ _ArrayToString() sollte da weiterhelfen...

  • taste gedrückt halten

    • Andy
    • 14. Oktober 2009 um 21:11
    [autoit]

    $zeit = 3000 ;ms
    $t = TimerInit()
    Do
    Send("{a}")
    Until TimerDiff($t) > $zeit

    [/autoit]
  • Komme nicht weiter!! BITTE helfen!

    • Andy
    • 13. Oktober 2009 um 17:29

    so?

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test-Programm", 625, 445, 192, 124)
    $Progress1 = GUICtrlCreateProgress(80, 264, 353, 25)
    $Button1 = GUICtrlCreateButton("Create ", 80, 168, 201, 49, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button1
    GUICtrlSetData($progress1,GUICtrlRead($progress1)+10)
    EndSwitch
    WEnd

    [/autoit]
  • Portfreigabe am Router

    • Andy
    • 13. Oktober 2009 um 16:54
    Zitat

    beide Beispiele sind (bei mir) Identisch

    ...sorry, da hat der Copypaste-Teufel zugeschlagen. Im Post sind sie jetzt richtig....

  • Portfreigabe am Router

    • Andy
    • 13. Oktober 2009 um 13:41

    ctec

    das Problem ist, daß viele den Sachverhalt als "UNGLAUBLICH KOMPLIZIERT" darstellen müssen, um ihre Existenzberechtigung zu erhalten. Natürlich hast du Recht, daß ich einiges zusammengewürfelt habe, aber heutige Router vereinen ca. 90% der von dir beschriebenen Funktionen in einem Gerät. Da blicken teilweise die Hersteller nicht mal mehr richtig durch^^
    Ich habe privat einen Billigstrouter, der zusammen mit einem Kabel und einer DIN A5 -"Installationsbeschreibung" in der Schachtel lag. Da stand grob, was man in den Browser tippen muss, um ins Konfigurationsmenü zu kommen...
    Zwei Minuten später war ich Online und 10 Minuten später hatte ich 90% der Filter angepasst und 4 Rechner im Netz.

    Meine Schwiegereltern haben sich "den Testsieger" als Router andrehen lassen, klasse Sache hab ich mir gedacht! Daß ein Netzwerkprofi als Redakteur das Ding nach Studium des 300-Seiten-Handbuches und der ultimativen Fähigkeiten der Konfiguration überragend bewertet kann ich mir vorstellen. Allerdings fällt Ottonormalverbraucher mit ein bissl Halbwissen die Konfiguration der achtundsiebzigtausend (zu 99% überflüssigen) Parameter doch ziemlich schwer. Vorkonfigurierung der üblichen Einstellungen: Fehlanzeige!
    Nach einer Stunde ergebnisloser rumtelefoniererei mit der Hotline hatte ich die Schnauze gestrichen voll und hab das Ding zurückgebracht. Der Händler war not amused, vor allem, als sein Techniker erklärte, das Gerät sei wohl defekt (ich hätte es "kaputtkonfiguriert"), da auch er damit keine Verbindung herstellen konnte^^. Da hab ich einfach 5 Kartons aus dem Regal geholt, alle aufgerissen und verlangt, er solle mit den "neuen" Geräten einen Versuch machen. Inzwischen war der Geschäftsführer und einige sehr interessierte Kunden eingetroffen....
    Insgesamt eine sehr überflüssige Aktion. Ende vom Lied, ich bekam natürlich den Router in ein "Der ist aber nur mit sehr einfachen Funktionen ausgestattet..."-Modell umgetauscht, der seltsamerweise schon beim Händler nach einer Minute "Installation" einwandfrei funktionierte und nun schon seit Jahren bei den Schwiegereltern unterm Schreibtisch seinen Dienst tut...
    Wenn ich als Handwerker Profiwerkzeug kaufe, dann gehe ich davon aus, dass damit die Arbeit einfacher, besser und schneller zu erledigen ist. Dort ist das auch so! Warum muss bei den "Netzwerkfuzzis" nur immer alles so (künstlich) kompliziert sein?

    Win7 hat schon schöne Ansätze bzgl. "einfacher" Netzwerkverbindungen auf Softwareseite. Opera macht mit Unite mit 3 Mausklicks aus dem lokalen Rechner einen http-/file-/ftp-Server.
    Wieso gibt es noch keine (genormte) Schnittstelle am Router, über welche man sämtliche Einstellungen bzgl. Router <-> Firewall,Port Forwarding <-> Filterregeln,Gateway <-> Router, Virtual Server, NAT
    vollautomatisch vom jeweiligen Programm abwickeln lässt? Alle Infos dazu befinden sich auf dem lokalen Rechner oder sind abrufbar im Netzwerk selbst. Aber scheinbar ist so eine einfache Lösung nicht "professionell" genug....

    ciao
    Andy

  • Portfreigabe am Router

    • Andy
    • 13. Oktober 2009 um 12:46

    Hi,
    greif doch einfach auf fertige Scripte zurück...die funktionieren mit Sicherheit^^
    Client:

    Spoiler anzeigen
    [autoit]

    $text = inputbox("TCP-Client","Bitte geben sie den Text ein, der zum Server gesendet werden soll")

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

    $Empfaenger_IP = @ipaddress1
    $Port = 33891

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

    TCPStartUp()
    $ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
    ;msgbox(0,@error,$text)
    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""
    TCPSend($ConnectedSocket, $text)
    Sleep(2000)

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

    TCPShutdown ()

    [/autoit]


    Server compilieren und laufen lassen, der Client kann dann aus Scite heraus gestartet werden:
    Achtung! Meine Firewall fragt nach, ob der Serverdienst erlaubt werden soll, wenn es Probleme gibt, schau im LOG der Firewall nach oder schalte sie kurzzeitig aus um zu testen, ob es daran liegt.

    Spoiler anzeigen
    [autoit]


    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1, 33891, 100 )

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

    While 1
    while 1 ;solange warten, bis ein Client eine Verbindung aufbaut
    $ConnectedSocket = TCPAccept($MainSocket)
    Tooltip("Server empfangsbereit...")
    If $ConnectedSocket <> -1 Then ExitLoop ;wenn daten empfangen...
    Sleep(100)
    WEnd
    msgbox(0,"TCP-Server","Server hat Verbindung zum Client aufgebaut",1)
    TCPSend($ConnectedSocket,"1") ;info an den client senden

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

    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""

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

    msgbox(0,"server hat empfangen:",$recv)

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

    WEnd
    TCPShutdown()

    [/autoit]


    Bei diesen beiden Beispielen ist ein "Protokoll" eingebaut :rofl:
    Und zwar sendet der Server, sobald der Client sich mit ihm verbunden hat, eine info "Hey, ich bin bereit" an den Client. Auf diese Info wartet der Client und schickt erst die Nachricht ab, wenn der Server bereit ist. Das ist dann sinnvoll, wenn man genau (z.B. mit Messageboxen) herausfinden möchte, wer was wann genau macht. (man könnte auf diesem Weg z.B. eine Passwortabfrage realisieren)

    Die beiden Scripte laufen in dieser Form lokal auf einem PC, du kannst gerne den Server und Client auf verschiedenen Rechnern in eurem Netzwerk laufen lassen, die IP des Servers sollte aber dem Client mitgeteilt werden.

    ciao
    Andy

    /*EDIT*/ Scripte berichtigt

  • Portfreigabe am Router

    • Andy
    • 13. Oktober 2009 um 11:31

    Hallo,
    Schnuffel, das mit dem Buch wäre ja keine schlechte Idee, allerdings ist der Computerkram nur ein Hobby, da gibt es Spezialisten, die sich wesentlich besser damit auskennen....

    @kloklo,
    Sorry, hatte eigentlich auf deine Frage geantwortet, aber die Antwort wurde wohl statt ins Forum ins NUL-Device geschickt^^

    Zitat

    Wie lass ich meinen Router wissen das der Client (hinterm Router) Daten angefordert hat und sie einfach durchlassen soll? Merkt der Router von alleine das ich Daten an den Server gesendet habe und lässt von daher die Daten einfach durch?

    Die Aufgabe des Routers ist (unter anderem), die Antwortpakete "von draussen" wieder an den richtigen PC im internen Netz weiterzugeben. Hast du dich noch nie gefragt, warum du beim Surfen nie die Websites von anderen Benutzern siehst, die gleichzeitig mit dir auf einer Leitung surfen? Der Router bekommt ja alle Pakete von draussen auf seine "Internetadresse" geschickt, die ist aber völlig anders wie die Adresse der PC´s in eurem heimischen Netz!
    Um mal bei dem Beispiel im Hotel zu bleiben (mir gefällt das irgendwie auch^^) bekäme jeder Bote, der mit einem Paket "nach draussen" geschickt wird, je nach Dienst (HTTP, FTP usw) eine farbige Mütze.
    D.h. alle Boten, die ohne Mütze ins Hotel (Router) kommen, müssen zum Portier, die Boten mit den farbigen Mützen können aber sofort in die Expressaufzüge zu den jeweiligen Diensten und dort ihre Pakete abliefern.
    Wenn du nun bestimmten Diensten erlauben willst, eine Verbindung aus dem Internet zuzulassen, dann musst du dem Router auch mitteilen, wohin er die Pakete schicken soll. Beispiel FTP-Server: Du startest den Server, dieser "lauscht" auf einem bestimmten Port...und wartet....und wartet....und wartet....
    Wenn jetzt jemand sich von ausserhalb mit diesem Server verbinden möchte, dann kennt derjenige ja nicht die IP-Adresse deines Rechners, sondern nur die IP-Adresse des Routers! Also schickt er die Verbindungsanfrage an den Router, und der schaut nun in einer Liste nach, an welchen Rechner im internen Netz er die Anfrage weiterleiten soll. Wenn der "lauschende" Server nicht auf der Liste steht, dann verwirft der Router diee Anfrage und der Server kann warten und warten und warten...
    /*HotelmodusON*/ Wenn allerdings Boten vom Server "nach draussen" geschickt werden, dann haben die ja eine der farbigen Mützen auf! Daher werden diese Boten beim zurückkommen auch wieder ungehindert durchgelassen.....

    ciao
    Andy

  • Pixelfarbe ändern

    • Andy
    • 12. Oktober 2009 um 18:30
    Zitat

    hehe danke..habe leider noch keine ferien

    na dann bist du entschuldigt...
    Funktion Setpixel()

  • Pixelfarbe ändern

    • Andy
    • 12. Oktober 2009 um 18:12

    Ja!
    Schau mal in der Hilfe nach den GDIplus-Funktionen, da sollten ca 50-100 Beispielscripte dabei sein, und alle ändern irgendwie die Pixelfarben...
    Aber damit du nicht deine Ferienzeit mit der Suche verschwendest, bei dieser Funktion ist ein Beispiel dabei, mit welchem man Pixel färben kann _GDIPlus_GraphicsFillRect

    Und weil ich genau weiß, daß als nächstes die Frage kommt, JA, man kann damit auch einzelne Pixel in einer bestimmten Farbe färben, dazu muss man nur die Höhe und Breite auf 1 setzen ;)

    ciao
    Andy

    /*EDIT*/ Das ist natürlich nur EINE von vielen verschiedenen Möglichkeiten...such mal im Forum nach der Funktion setpixel()

  • Schlechte suche

    • Andy
    • 12. Oktober 2009 um 16:30
    Zitat

    sondern immer "site:https://autoit.de/www.autoit.de Suchbegriff".

    weil ich ziemlich faul bin und ab und zu auch auf mehreren Seiten gleichzeitig suche, habe ich das hier gebastelt....

  • Wieso interessiert Autoit mein timeout bei Ping nicht :-(

    • Andy
    • 12. Oktober 2009 um 11:52

    Hi,
    hier gibt es eine Erklärung. Windows (bzw die implementierung des TCP) "berechnet" die Wartezeit auf einen nicht laufenden Serverprozess dynamisch. Das kann bis zu 15 Sekunden dauern und ist NICHT beeinflussbar!

    Zitat

    Die Antwortzeit wenn ein Server nicht antwortet, könntest du mit den Zeitfunktionen ermitteln.

    Genau DAS funktioniert nicht.....

    Spoiler anzeigen
    [autoit]

    Opt("TCPTimeout", 3000) ;1000 milliseconds egal welche zahl, bringt nix....

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

    TCPStartup()
    ;ip-adressen der ftp-server oder eines erreichbaren rechners, auskommentieren zum testen
    $szIPADDRESS = "193.99.144.85" ; Heise hat dort keine ftp-server laufen
    ;$szIPADDRESS = "85.214.130.125" ;autoit aber schon
    ;$szIPADDRESS = "127.0.0.1" ;intern, hier wird die adlib-funktion aufgerufen

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

    $pingzeit = Ping($szIPADDRESS, 500)
    If $pingzeit <> 0 Then ;wenn Rechner per ping erreichbar, dann
    MsgBox(0, "Ping erfolgreich", $pingzeit)
    Else
    MsgBox(0, "Ping fehlgeschlagen!", 0)
    EndIf

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

    $nport = 21 ;ftp
    $mainsocket = -1 ;keine Verbindung

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

    Global $t = TimerInit() ; timer startzeit merken
    AdlibEnable("_tcp_timeout", 1000) ;"normalerweise" würde nach einer Sekunde die Funktion aufgerufen werden, auch wenn der Rechner nicht erreichbar ist, funktion
    $mainsocket = TCPConnect($szIPADDRESS, $nport) ; wenn kein server auf port 21 erreichbar ist, dann Wartezeit ca 15-20 sec, obwohl der rechner online ist
    $error=@error
    AdlibDisable()

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

    $m = TimerDiff($t) ;wieviel zeit ist seit dem timerstart vergangen?
    If $mainsocket <> -1 Then ;wenn Verbindung zum FTP hergestellt, dann
    MsgBox(0, "mainsocket " & $m, "FTP-Server erreicht unter "&$mainsocket)
    Else
    MsgBox(0, $m, "FTP-Server nicht erreichbar"&@crlf&"Fehlernummer: "&$error)
    EndIf
    Exit

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

    Func _tcp_timeout() ;wird nur bei internen netzverbindungen aufgerufen....
    $m = Int(TimerDiff($t)) ;wieviel zeit ist seit dem timerstart vergangen?
    If $mainsocket = -1 Then
    MsgBox(0, "adlib "& $m, "FTP-Server nicht erreichbar" & @CRLF )
    Else
    Msgbox(0,0,"Diese Nachricht sollte man normalerweise nicht sehen!")
    endif
    AdlibDisable()
    EndFunc ;==>_tcp_timeout

    [/autoit]

    probiert das einfach mit den auskommentierten IP´-Adressen am Anfang des Scriptes aus. Die AdlibEnable() -Funktion wird ausschliesslich bei INTERNEN Rechnerverbindungen (alles was nicht über den Router nach "draussen" läuft) aufgerufen! Wenn ein Rechner im Internet per Ping erreichbar ist, aber dort kein z.B. FTP-Server läuft, dann werden die Anfragen nach dort auch nicht von der AdlibEnable()-Funktion unterbrochen!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™