IP adresse ermitteln und nach DC's neue IP in datei schreiben

  • Hallo erstmal,

    wollte mir einen server aufmachen das problem ist nur das ich keine DynDNS und so nutzen kann weil ich die IP als Zahl brauche und nicht als Text.
    Meine frage ist nun wie kriege ich die momentahne IP raus bzw wie kann es hinbekommen wenn sich die IP ändert das dann in einer Text Datei an einer bestimmten stelle die neue IP mit der alten IP ausgetauscht wird.
    Also hab nen server und bei IP wechsel durch DC's soll dann die neue IP in bestimmte Text dateien eingetragen werden

    Die Textdateien sehen ungefähr so aus:

    Spoiler anzeigen

    ;
    CAST_PORT = 7882
    DATABASE_ADDRESS = 127.0.0.1,1433
    DATABASE_DATABASE = *******
    DATABASE_ACCOUNT = *********
    DATABASE_PASSWORD = ********
    CAST_SERVER_ID = 1101
    LOG_PATH = ..\LogFiles\


    Wenn nun ein DC kommt dann soll zb. von "DATABASE_ADDRESS = 127.0.0.1,1433" nur die 127.0.0.1 umgeändert werden.
    Ich weiß das ist hier ne locale IP.

    habe auch schon ein script gefunden mit dem ich die IP raus bekomme diese wird dann in einer Msg Box angezeigt

    Spoiler anzeigen
    [autoit]

    $PublicIP = _GetIP()
    MsgBox(0, "IP Address", "Your IP Address is: " & $PublicIP)

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

    Func _GetIP()
    Local $ip
    If InetGet("http://checkip.dyndns.org/", @TempDir & "\~ip.tmp") Then
    $ip = FileReadLine(@TempDir & "\~ip.tmp")
    $ip = StringTrimLeft ($ip , 76)
    $ip = StringTrimRight ($ip , 14)
    FileDelete(@TempDir & "\~ip.tmp")
    Return $ip
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc

    [/autoit]

    MfG EmEx

  • so?

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>

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

    $filename = @ScriptDir&"\ip.txt"
    ;get log
    $file = FileOpen($filename, 0)
    $read = FileRead($file)
    FileClose($file)

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

    ;get IP-Adresses
    ;log:
    $aret = StringRegExp($read, "DATABASE_ADDRESS \= (.+?)\,", 3)
    If IsArray($aret) Then $log_ip = $aret[0]

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

    ;current:
    $cur_ip = _GetIP()

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

    ;info
    MsgBox(0, "Info", "LOG IP: "&$log_ip&@CRLF&"CURRENT IP: "&$cur_ip)

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

    ;replace and save in file
    If $cur_ip <> $log_ip Then
    $read = StringReplace($read, $log_ip, $cur_ip)
    $file = FileOpen($filename, 2)
    FileWrite($file, $read)
    FileClose($file)
    EndIf

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • jo sieht cool aus die ip.txt is dann denk ich mal die datei in dewr die ip geändert werden soll,oder?

    MfG EmEx

  • die ip.txt sah bei mir so aus:

    Code
    ;
    CAST_PORT = 7882
    DATABASE_ADDRESS = 127.0.0.1,1433
    DATABASE_DATABASE = *******
    DATABASE_ACCOUNT = *********
    DATABASE_PASSWORD = ********
    CAST_SERVER_ID = 1101
    LOG_PATH = ..\LogFiles\

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • hmmm beim erstem mal probieren ging es aber nun bekomme ich nen error

    Line-1:

    Error: Variable used without being declared.

    warum, wieso?


    Ja die ip.txt nent sich im originalen config.ini aber das sollte ja kein problem sein.

  • ne habs natürlich compiliert und im scite sagt er mir

    Spoiler anzeigen

    >"H:\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "E:\Dokumente und Einstellungen\phfroherz\Eigene Dateien\Eigene Macros\IP canger.au3" /autoit3dir "D:\Programme\AutoIt3" /UserParams
    +>00:02:46 Starting AutoIt3Wrapper v.1.10.1.4 Environment(Language:0407 Keyboard:00010407 OS:WIN_XP/Service Pack 3 CPU:X86)
    >Running AU3Check (1.54.10.0) from:H:\AutoIt3
    +>00:02:46 AU3Check ended.rc:0
    >Running:(3.2.10.0):H:\AutoIt3\autoit3.exe "E:\Dokumente und Einstellungen\phfroherz\Eigene Dateien\Eigene Macros\IP canger.au3"
    E:\Dokumente und Einstellungen\phfroherz\Eigene Dateien\Eigene Macros\IP canger.au3 (18) : ==> Variable used without being declared.:
    MsgBox(0, "Info", "LOG IP: "&$log_ip&@CRLF&"CURRENT IP: "&$cur_ip)
    MsgBox(0, "Info", "LOG IP: "&^ ERROR
    ->00:02:47 AutoIT3.exe ended.rc:1
    >Exit code: 1 Time: 2.941

  • Hmpf dem kann man natürlich Abhilfe schaffen aber dann tritt wahrscheinlich das nächste problem auf

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>

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

    Global $log_ip

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

    $filename = @ScriptDir&"\ip.txt"
    ;get log
    $file = FileOpen($filename, 0)
    $read = FileRead($file)
    FileClose($file)

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

    ;get IP-Adresses
    ;log:
    $aret = StringRegExp($read, "DATABASE_ADDRESS \= (.+?)\,", 3)
    If IsArray($aret) Then $log_ip = $aret[0]

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

    ;current:
    $cur_ip = _GetIP()

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

    ;info
    MsgBox(0, "Info", "LOG IP: "&$log_ip&@CRLF&"CURRENT IP: "&$cur_ip)

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

    ;replace and save in file
    If $cur_ip <> $log_ip Then
    $read = StringReplace($read, $log_ip, $cur_ip)
    $file = FileOpen($filename, 2)
    FileWrite($file, $read)
    FileClose($file)
    EndIf

    [/autoit]

    Wenn das so ist findet mein Regexp deine IP Adresse im Log wohl nicht... wie sieht denn deine INI aus?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Versuchs mal so :)

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global $filename, $file, $read, $aret, $log_ip, $cur_ip

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

    $filename = @ScriptDir&"\ip.txt"
    ;get log
    $file = FileOpen($filename, 0)
    $read = FileRead($file)
    FileClose($file)

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

    ;get IP-Adresses
    ;log:
    $aret = StringRegExp($read, "DATABASE_ADDRESS.*?= (.*?)\,", 3)
    If IsArray($aret) Then $log_ip = $aret[0]

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

    ;current:
    $cur_ip = _GetIP()

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

    ;info
    MsgBox(0, "Info", "LOG IP: "&$log_ip&@CRLF&"CURRENT IP: "&$cur_ip)

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

    ;replace and save in file
    If $cur_ip <> $log_ip Then
    $read = StringReplace($read, $log_ip, $cur_ip)
    $file = FileOpen($filename, 2)
    FileWrite($file, $read)
    FileClose($file)
    EndIf

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • jo das sieht SHER schön aus, danke. Nun wollte ich das ganze erweitern weil ich habe 4 Dateien die ähnlich aufgebaut sind.
    Wollte dann vllt mehrere scripte machen und diese dann mit einem Hauptscript nacheinander starten aber wenn es geht alles in ein script zu packen wäre natürlich noch besser.

    ich pack mal die config.ini mit ordner strucktur als anhang.

    Ich danke dir schon mal für deine große hilfe.

    MfG EmEx

  • Ich habe dir doch nun ein Beispiel gegeben? Versuch doch erstmal selbst weiter daran zu arbeiten wenn du fragen hast helfen wir dir natürlich gerne weiter ;)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Ich habe dir doch nun ein Beispiel gegeben? Versuch doch erstmal selbst weiter daran zu arbeiten wenn du fragen hast helfen wir dir natürlich gerne weiter ;)

    Jojo hab ja uch schon rumgebastelt, nun das große ABER
    Im Ordner DekaronServer die config.inimache ich nun mit 5 Scripten (weil is für mich einfacher) um die erste IP zu ändern habe ich nun das script wie folgt angepasst aber er erkennt die IP nicht die drinn steht,warum? es wird dann natürlich auchn nichts geändert.

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global $filename, $file, $read, $aret, $log_ip, $cur_ip

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

    $filename = @ScriptDir&"DekaronServer\config.ini"
    ;get log
    $file = FileOpen($filename, 0)
    $read = FileRead($file)
    FileClose($file)

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

    ;get IP-Adresses
    ;log:
    $aret = StringRegExp($read, "SESSION_NO1_IP.*?= (.*?)\", 3)
    If IsArray($aret) Then $log_ip = $aret[0]

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

    ;current:
    $cur_ip = _GetIP()

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

    ;info
    MsgBox(0, "Info", "Alte IP: "&$log_ip&@CRLF&"Neue IP: "&$cur_ip)

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

    ;replace and save in file
    If $cur_ip <> $log_ip Then
    $read = StringReplace($read, $log_ip, $cur_ip)
    $file = FileOpen($filename, 2)
    FileWrite($file, $read)
    FileClose($file)
    EndIf

    [/autoit]


    So für den zweiten IP eintrag in der gleichen datei hab ich mir das umgeändert

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global $filename, $file, $read, $aret, $log_ip, $cur_ip

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

    $filename = @ScriptDir&"DekaronServer\config.ini"
    ;get log
    $file = FileOpen($filename, 0)
    $read = FileRead($file)
    FileClose($file)

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

    ;get IP-Adresses
    ;log:
    $aret = StringRegExp($read, "CAST_NO1_IP.*?= (.*?)\", 3)
    If IsArray($aret) Then $log_ip = $aret[0]

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

    ;current:
    $cur_ip = _GetIP()

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

    ;info

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

    ;replace and save in file
    If $cur_ip <> $log_ip Then
    $read = StringReplace($read, $log_ip, $cur_ip)
    $file = FileOpen($filename, 2)
    FileWrite($file, $read)
    FileClose($file)
    EndIf

    [/autoit]

    Machs dir doch ganz einfach.. wenn du die IP als Zahl brauchst dann benutzt du einfach TCPNameToIP :D

    Ich vermute mal damit wird dann nur die locale IP angezeigt, oder?
    achso nee habs mir noachmal angeguckt ne das is net ganz das was ich brauche weil ich brauche meine öffentliche IP

  • Wenn du deine Öffentliche IP mit DynDNS linkst, und dann die Addresse von DynDNS per TCPNameToIP umwandelst bekommst du deine öffentliche ;)

  • Also du hast in dieser config.ini kein Komma hinter der IP Adresse sondern einen Zeilenumbruch also änder mal den Regexp so ab:

    [autoit]

    $aret = StringRegExp($read, "SESSION_NO1_IP.*?= (.*?)\s", 3)

    [/autoit]

    Der Backslash ist üblicherweise nur ein "escape" Zeichen, deswegen stand er vor dem Komma:
    \s = Any whitespace Character

    Es sollte so eigentlich funktionieren. Auch mit deinem 2. Problem.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Wenn du deine Öffentliche IP mit DynDNS linkst, und dann die Addresse von DynDNS per TCPNameToIP umwandelst bekommst du deine öffentliche ;)

    achso haste das vor ja wäre auch ne idee.


    Also du hast in dieser config.ini kein Komma hinter der IP Adresse sondern einen Zeilenumbruch also änder mal den Regexp so ab:

    [autoit]

    $aret = StringRegExp($read, "SESSION_NO1_IP.*?= (.*?)\s", 3)

    [/autoit]

    Der Backslash ist üblicherweise nur ein "escape" Zeichen, deswegen stand er vor dem Komma:
    \s = Any whitespace Character

    Es sollte so eigentlich funktionieren. Auch mit deinem 2. Problem.

    hmm es wird immer noch net erkannt was passiert denn wqenn ich \W mache ich probs mal.

  • ach jo ging mit den \s habe aber ganz oben

    [autoit]

    $filename = @ScriptDir&"DekaronServer\config.ini"

    [/autoit]


    drinn stehen gehabt aber da muss

    [autoit]

    $filename = @ScriptDir&"\DekaronServer\config.ini"

    [/autoit]


    drinn stehen vor Dekaron habsch das \ vergessen ohhh mann ein kleiner Fehler und alles geht net ROFL

    LOL er hat ROFL gesagt xD

    MfG EmEx