Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Script zum IP speichern

Featured Replies

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?

  • Community Expert

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"

 

  • Author

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 by Anym001

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. :D

 

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

 

  • Author
6 hours ago, ich777 said:

Probier das:

 

Funktioniert. :)

Vielen Dank!

@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?

  • Author
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. :)

  • Community Expert
14 minutes ago, Anym001 said:

dass man diese Logik für die von @mgutt geschriebene Nextcloud Firewall auch verwenden könnte. 

Stimmt.

Archived

This topic is now archived and is closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.