Anym001 Posted April 7, 2021 Share Posted April 7, 2021 Hallo, ich möchte mir gerne täglich mithilfe eines Scriptes meine aktuelle öffentliche IP weg schreiben. Dazu soll eine Datei unter /mnt/cache/myip.txt mit dem aktuellen Zeitstempel und der ermittelten IP gespeichert und täglich ergänzt werden. Hat vielleicht jemand eine Idee wie man das umsetzen kann? Quote Link to comment
mgutt Posted April 7, 2021 Share Posted April 7, 2021 Mit einer doppelten eckigen Klammer kann man Text in eine Datei schreiben: https://stackoverflow.com/a/11162510/318765 Und die öffentliche IP bekommt man nur in dem man eine Website herunterlädt, die mit der IP antwortet. Da gibt es verschiedene: https://stackoverflow.com/questions/14594151/methods-to-detect-public-ip-address-in-bash https://www.cyberciti.biz/faq/how-to-find-my-public-ip-address-from-command-line-on-a-linux/#:~:text=Use 3rd party web-sites to get your IP Beispiel: http://checkip.amazonaws.com/ zB könnte man nun die IP einer Variablen zuordnen: server_ip="$(curl checkip.amazonaws.com)" Und dann packt man den Inhalt der Variablen in eine Datei: echo $server_ip >> "/mnt/cache/myip.txt" Teste die beiden Kommandos im Webterminal und wenn sie funktionieren, packst du sie in ein Script und lässt das zB alle 5 Minuten ausführen. Mit dem Befehl kannst du übrigens den Inhalt einer Datei ausgeben lassen: cat "/mnt/cache/myip.txt" 1 Quote Link to comment
Anym001 Posted April 8, 2021 Author Share Posted April 8, 2021 (edited) Vielen Dank hat funktioniert. Quote server_ip="$(curl ipecho.net/plank)" echo $server_ip >> "/mnt/cache/myip.txt" Könnte ich vorher auch noch abprüfen, ob der Wert in dem File schon vorhanden ist und dann nur rein schreiben, wenn er noch nicht vorhanden ist? Edited April 8, 2021 by Anym001 Quote Link to comment
ich777 Posted April 8, 2021 Share Posted April 8, 2021 3 hours ago, Anym001 said: Vielen Dank hat funktioniert. Könnte ich vorher auch noch abprüfen, ob der Wert in dem File schon vorhanden ist und dann nur rein schreiben, wenn er noch nicht vorhanden ist? Probier das: #!/bin/bash currenIP="$(wget -qO- ipecho.net/plain)" filepath="/mnt/cache/myip.txt" if [ ! "$(cat $filepath | tail -5 | grep ${currentIP})" ]; then echo "$(date +'%Y-%m-%d')" ${currentIP} >> ${filepath} fi Nur kurz zur Erklärung: if holt sich die letzten 5 Einträge deiner myip.txt Datei mittels tail und prüft dann mittels grep ob diese gefunden wird mittels grep und das ganze wird umgekehrt durch ! am Anfang sprich: Wenn einer der letzten 5 Einträge in deiner Datei myip.txt nicht gleich der aktuellen IP ist dann schreibe die aktuelle IP in die myip.txt hinzu. (die letzten 5 Einträge deswegen weil es durchaus möglich sein kann das du nach einer Woche oder ein paar Tagen wieder die gleiche IP hast die du schon mal gehabt hast und die würde dann nicht geschrieben werden wenn du einfach blind nach der IP suchen würdest, kannst 5 auch mit 3 oder so tauschen wenn du noch weniger prüfen willst oder sich deine IP nur selten ändert) Bei meinem Script füge ich dann noch den Datum hinzu am Anfang damit du siehst wann das war, Uhrzeit finde ich hier ein wenig übertrieben. Hoffe das ergibt Sinn. EDIT: Du kannst es auch zusätzlich ins syslog schreiben nur damit du siehst was er so macht... currenIP="$(wget -qO- ipecho.net/plain)" filepath="/mnt/cache/myip.txt" if [ ! "$(cat $filepath | tail -5 | grep ${currentIP})" ]; then logger "Writing current public IP: ${currentIP} to myip.txt" echo "$(date +'%Y-%m-%d')" ${currentIP} >> ${filepath} else logger "Nothing to do, current public IP: ${currentIP} hasn't changed." fi 1 Quote Link to comment
Anym001 Posted April 8, 2021 Author Share Posted April 8, 2021 6 hours ago, ich777 said: Probier das: Funktioniert. :) Vielen Dank! Quote Link to comment
mgutt Posted April 8, 2021 Share Posted April 8, 2021 PS Falls du nur eine IP drin haben willst, kannst du auch nur eine eckige Klammer nehmen: https://stackoverflow.com/a/4676473/318765 Quote Link to comment
ich777 Posted April 8, 2021 Share Posted April 8, 2021 @Anym001 genau wie @mgutt schon geschrieben hat eine > überschreibt die ganze Datei mit der Ausgabe des Befehls in Linux und zwei >> fügen die Ausgabe des Befehls am Schluss der Datei hinzu. Ich glaube aber dein Usecase ist eben das du wissen willst wie oft und wann sich deine IP geändert hat oder? Quote Link to comment
Anym001 Posted April 8, 2021 Author Share Posted April 8, 2021 1 hour ago, ich777 said: Ich glaube aber dein Usecase ist eben das du wissen willst wie oft und wann sich deine IP geändert hat oder? Ja genau. Wobei mir gerade noch eingefallen ist, dass man diese Logik für die von @mgutt geschriebene Nextcloud Firewall auch verwenden könnte. Hab mal ein bisschen was zusammen gebastelt: (weg schreiben der 3-stelligen IP-Range der aktuellen public IP > wobei geprüft wird, ob eine entsprechende Datei bereits existiert) Quote current_ip="$(wget -qO- ipecho.net/plain)" ip_range="$(echo $current_ip | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')" filepath="/mnt/user/appdata/nextcloud/nextcloud/firewall/${ip_range}.ip" if [ ! -f ${filepath} ]; then logger "USER SCRIPTS: Creating the file ${filepath}" /usr/local/emhttp/webGui/scripts/notify -i normal -s "File created." -d "File ${filepath} successfully created." echo -n > ${filepath} else logger "USER SCRIPTS: Nothing to do, the file ${filepath} already exists." fi Somit wäre zumindest der Zugriff von “Zuhause” immer ohne Probleme möglich. Quote Link to comment
mgutt Posted April 8, 2021 Share Posted April 8, 2021 14 minutes ago, Anym001 said: dass man diese Logik für die von @mgutt geschriebene Nextcloud Firewall auch verwenden könnte. Stimmt. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.