externe (WAN)-IP ermitteln und in eine Datei schreiben

Status
Für weitere Antworten geschlossen.

tholler

Benutzer
Mitglied seit
13. Nov 2010
Beiträge
132
Punkte für Reaktionen
1
Punkte
18
Hallo zusammen,

ich habe eine DS 211 und eine Fritz!Box 7390 als Router. Jetzt suche ich eine Möglichkeit meine externe IP automatisch ermitteln zu lassen und diese ggf. mit der aktuellen Uhrzeit in eine Datei zu schreiben.

Hintergrund: Wir haben z.Z. sehr viele Connection-Abbrüche und ich möchte gerne protokollieren, wann die Aussetzer erfolgten. Da wir jedes mal eine neue IP zugewiesen bekommen, finde ich das als die einfachste Möglichkeit.

Hat jemand ein Skript, das das kann, und kann mir auch noch erklären, wie ich das Script auf der DS eingebunden bekomme?

CRON habe ich schon installiert, das sollte also die einfachste Möglichkeit sein das Script neu zu starten. Nur: Wie ermittele ich meine externe IP, bekomme diese angezeigt und in eine Datei geschrieben?

Vielen Dank schon mal für Eure Hilfe
Thorsten
 

joku

Benutzer
Mitglied seit
06. Mrz 2011
Beiträge
6.664
Punkte für Reaktionen
2
Punkte
164
Jetzt suche ich eine Möglichkeit meine externe IP automatisch ermitteln zu lassen und diese ggf. mit der aktuellen Uhrzeit in eine Datei zu schreiben.
Hallo Thorsten, wenn es auch eine eMail macht :)
Den Push- Service aktivieren.
FritzBox / System / Push Service / Aktuelle IP-Adresse
Ein Logeintrag findest Du unter
FritzBox / System / Ereignisse / Internetverbindung

Gruß Jo
 

tholler

Benutzer
Mitglied seit
13. Nov 2010
Beiträge
132
Punkte für Reaktionen
1
Punkte
18
Hallo joku,

den habe ich aktiviert und bekomme jedes mal 2 Mails (IP V4 und V6). Aber ich hätte halt gerne eine Zusammenfassung, die ich dann als eine Datei der Telekom um die Ohren hauen kann. Daher meine Frage nach einem Skript.

Ach ja, Logeintrag - Frage: Wie viele Einträge werden dort gespeichert? Bei mir ist der Logeintrag manchmal nur für ein paar Stunden, selten mal für ein paar Tage. Und irgendwie wird das Log sporadisch gelöscht - glaube ich zu mindest.

lg
TH
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.262
Punkte für Reaktionen
608
Punkte
174
Hi,

ich mache das auch mittels selbst gebasteltem Script. Ich verwende dazu den 'nslookup' Befehl da die Domain mittels DynDNS updater ständig aktualisiert wird.
Mir ist auch bewusst, dass es dann in dem Fall einer Fehlerhaften Aktualisierung der IP auch zu einer falschen Information führen kann. Jedoch für meine Zwecke sehr Hilfreich und bisher ohne Probleme. Ich lasse das Script einmal pro Stunde laufen und bekomme dann eine Änderung der WAN IP mit und weiß somit in welchem groben Zeitraum (volle Stunde) eine neue WAN IP vergeben wurde.

Mein Script hänge ich hier als Code Block mit an, in der Hoffnung es könnte dir bei deinem Zweck helfen.

Rich (BBCode):
#!/bin/sh

# Domain mittels Parameter übergeben
domain=$1

if [ ! -z "$domain" ]; then
  
  # Festlegen des Zielverzeichnis und der Zieldatei
  target_dir=/volume1/temp    #Pfad anpassen!
  target_file=$target_dir/"$domain".txt

  # Festlegen der Dateipfade "letzte" und "neue" wan ip
  last_wanip_file=$target_dir/."$domain"_last_wanip.txt
  new_wanip_file=$target_dir/"$domain"_new_wanip.txt

  # Prüfen ob Zielverzeichnis existiert
  if [ ! -d "$target_dir" ]; then
    # falls nicht, dann erstellen
    mkdir -p "$target_dir"
  fi

  # Zeitstempel erstellen
  timestamp=$(date +"%Y/%m/%d %H:%M")
	
  # WAN IP über nslookup ausfindig machen
  wanip=`nslookup "$domain" | grep -m2 Address | tail -n1 | awk '{print $3}'`

  # Prüfen ob es bereits eine alte Datei mit einer vergangenen WAN IP gibt
  if [ ! -f "$last_wanip_file" ]; then
    # Wenn nicht existiert, dann diese Datei erstellen mit der ermittelten WAN IP
    echo "$wanip" > "$last_wanip_file"
    # Speichern der neu ermittelten WAN IP in die Zieldatei
    echo "$timestamp: $wanip" >> "$target_file"
  else
    # Wenn bereits existiert, dann WAN IP speichern in Datei "neue WAN IP"
    echo "$wanip" > "$new_wanip_file"
    # Vergleich zwischen "alte" und "neue" WAN IP
    difference=`diff $new_wanip_file $last_wanip_file`
    if [ ! -z "$difference" ]; then
      # Wenn Unterschied besteht, dann setze die "neue" zu "alte"
      mv "$new_wanip_file" "$last_wanip_file"
      # Speichern der neu ermittelten WAN IP in die Zieldatei
      loc_last_wan_ip=`cat "$last_wanip_file"`
      echo "$timestamp: $loc_last_wan_ip" >> "$target_file"
    else
      # Wenn kein Unterschied besteht, dann die ermittelte "neue" WAN IP Datei löschen
      rm "$new_wanip_file"
    fi
  fi
else
  # Falls kein Übergabeparameter beim Aufruf der shell angegeben wurde
  echo "Keine Domain als Parameter angegeben!"
fi
exit 0

Gruß
luddi
 
Zuletzt bearbeitet:

tholler

Benutzer
Mitglied seit
13. Nov 2010
Beiträge
132
Punkte für Reaktionen
1
Punkte
18
Hai luddi,

danke für das Skript, nur verwende ich kein DynDNS und bin dort auch nicht registriert. Ich bekomme die IP über folgende Zeile angezeigt:
curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"

Ist zwar auch DynDNS, aber gibt mir die IP ohne Domain dort zu haben.

Meine Frage/Bitte: Ich bin leider kein Coder, kannst Du mit Dein Skript so abändern, dass die Auswertung der IP durch "curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"" erfolgt.

Viele Grüße
TH
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.262
Punkte für Reaktionen
608
Punkte
174
Voilà!

Rich (BBCode):
#!/bin/sh

  
# Festlegen des Zielverzeichnis und der Zieldatei
target_dir=/volume1/temp    #Pfad anpassen!
target_file=$target_dir/wan_ip_log.txt

# Festlegen der Dateipfade "letzte" und "neue" wan ip
last_wanip_file=$target_dir/.wan_ip_log_last_wanip.txt
new_wanip_file=$target_dir/wan_ip_log_new_wanip.txt

# Prüfen ob Zielverzeichnis existiert
if [ ! -d "$target_dir" ]; then
  # falls nicht, dann erstellen
  mkdir -p "$target_dir"
fi

# Zeitstempel erstellen
timestamp=$(date +"%Y/%m/%d %H:%M")

# WAN IP ausfindig machen
wanip=`curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"`

# Prüfen ob es bereits eine alte Datei mit einer vergangenen WAN IP gibt
if [ ! -f "$last_wanip_file" ]; then
  # Wenn nicht existiert, dann diese Datei erstellen mit der ermittelten WAN IP
  echo "$wanip" > "$last_wanip_file"
  # Speichern der neu ermittelten WAN IP in die Zieldatei
  echo "$timestamp: $wanip" >> "$target_file"
else
  # Wenn bereits existiert, dann WAN IP speichern in Datei "neue WAN IP"
  echo "$wanip" > "$new_wanip_file"
  # Vergleich zwischen "alte" und "neue" WAN IP
  difference=`diff $new_wanip_file $last_wanip_file`
  
  if [ ! -z "$difference" ]; then
    # Wenn Unterschied besteht, dann setze die "neue" zu "alte"
    mv "$new_wanip_file" "$last_wanip_file"
    # Speichern der neu ermittelten WAN IP in die Zieldatei
    loc_last_wan_ip=`cat "$last_wanip_file"`
    echo "$timestamp: $loc_last_wan_ip" >> "$target_file"
  else
    # Wenn kein Unterschied besteht, dann die ermittelte "neue" WAN IP Datei löschen
    rm "$new_wanip_file"
  fi
fi

exit 0

Nur noch die Zeile 5 anpassen und den gewünschten Zielpfad angeben, fertig!

target_dir=/volume1/temp #Pfad anpassen!

Gruß
luddi
 
Zuletzt bearbeitet:

tholler

Benutzer
Mitglied seit
13. Nov 2010
Beiträge
132
Punkte für Reaktionen
1
Punkte
18
wow, super klasse - klappt einwandfrei ---------- DANKE!!!!!!!!!!!!!!!!!!!!!!!
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.262
Punkte für Reaktionen
608
Punkte
174
Freut mich wenn ich helfen konnte. :eek:

Gruß
luddi
 

cashmoe

Benutzer
Mitglied seit
01. Mrz 2012
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hi Luddi,

dein script ist super und genau was ich gesucht habe, ich bekomme es aber nur online zum laufen, bzw schreiben des logfiles. Ich möchte aber das script im Batch laufen lassen, d.h. über den Aufgabenplaner. Klappt mit anderen scripts schon gut. Ich bin nun auch kein Entwickler aber ich weiß das bei batch die befehle mit kompletter Pfadangabe mitgegeben werden müssen?! Hast du eine Idee dein Sript batchfähig zu bekommen? Dankschön im voraus!
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.262
Punkte für Reaktionen
608
Punkte
174
Als welcher USER wird denn versucht das script per Aufgabenplaner zu starten?
Wenn es als root gestartet wird dann sollte es eigentlich klappen, denn in der /root/.profile ist PATH definiert.

Andernfalls kannst du PATH auch direkt am Anfang des script files definieren:

Rich (BBCode):
#!/bin/sh
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

# Festlegen des Zielverzeichnis und der Zieldatei
target_dir=/volume1/temp    #Pfad anpassen!
target_file=$target_dir/wan_ip_log.txt
[...]

oder du verwendest im script absolute Pfade zu den jeweiligen binaries.

Gruß
luddi
 

cashmoe

Benutzer
Mitglied seit
01. Mrz 2012
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Wow,

superschnelle Antwort, ich arbeite mit dem root user, ok ich werd mal basteln und geb dann feedback.

1000 Dank erstmal
 

cashmoe

Benutzer
Mitglied seit
01. Mrz 2012
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hi Luddi,

ich habe viel probiert aber es will über den Aufgabenplaner partout nicht den txt file schreiben, hast du noch eine idee? Kannst du die absoluten pfaden zu den binaries aufzeigen? ggf mache ich nur einen syntaxfehler, wie gesagt, absoluter noobie auf dem sector:

Ziel: Ausführung im Aufgabenplaner mit User root:

#!/bin/sh
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

# Festlegen des Zielverzeichnis und der Zieldatei
target_dir=/volume1/Unblock-us/ #Pfad anpassen!
target_file=/volume1/Unblock-us/wan_ip_log.txt

# Festlegen der Dateipfade "letzte" und "neue" wan ip
last_wanip_file=/volume1/Unblock-us/.wan_ip_log_last_wanip.txt
new_wanip_file=/volume1/Unblock-us/wan_ip_log_new_wanip.txt

# Prüfen ob Zielverzeichnis existiert
if [ ! -d "/volume1/Unblock-us/" ]; then
# falls nicht, dann erstellen
/bin/mkdir -p /volume1/Unblock-us/
fi

# Zeitstempel erstellen
timestamp=$(date +"%Y/%m/%d %H:%M")

# WAN IP ausfindig machen
wanip=`curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"`

# Prüfen ob es bereits eine alte Datei mit einer vergangenen WAN IP gibt
if [ ! -f "$last_wanip_file" ]; then
# Wenn nicht existiert, dann diese Datei erstellen mit der ermittelten WAN IP
/bin/echo "$wanip" > "$last_wanip_file"
# Speichern der neu ermittelten WAN IP in die Zieldatei
/bin/echo "$timestamp: $wanip" >> "$target_file"
else
# Wenn bereits existiert, dann WAN IP speichern in Datei "neue WAN IP"
/bin/echo "$wanip" > "$new_wanip_file"
# Vergleich zwischen "alte" und "neue" WAN IP
difference=`diff $new_wanip_file $last_wanip_file`

if [ ! -z "$difference" ]; then
# Wenn Unterschied besteht, dann setze die "neue" zu "alte"
/bin/mv "$new_wanip_file" "$last_wanip_file"
# Speichern der neu ermittelten WAN IP in die Zieldatei
loc_last_wan_ip=`cat "$last_wanip_file"`
/bin/echo "$timestamp: $loc_last_wan_ip" >> "$target_file"
else
# Wenn kein Unterschied besteht, dann die ermittelte "neue" WAN IP Datei löschen
/bin/rm "$new_wanip_file"
fi
fi

exit 0
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat