Script zum IP speichern


Anym001

Recommended Posts

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?

Link to comment

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"

 

  • Thanks 1
Link to comment

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
Link to comment
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

 

  • Thanks 1
Link to comment
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. :)

Link to comment

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.