eigene IP-Adressen loggen

oyster-manu

oyster-manu

toast
Hallo,

welche Möglichkeiten gibt es seine eigene IP-Adresse (die vom Provider zugewiesen wurde) mit Datum und Zeit zu loggen?

Der Log soll dann so aussehen:
Code:
Datum        Uhrzeit               IP
2009.07.20 13:05 Uhr            x.x.x.x
2009.07.20 14:25 Uhr            x.x.x.y

Man könnte ein einfaches Skript schreiben, dass einem das Datum und die IP notiert. Jedoch müsste das Skript wissen ob man überhaupt online ist.

Es geht mir haupsächlich darum bei Ahmanungen, die einem unterstellen mit der IP x zum Zeitpunkt y irgendwas im Netz verbrochen zu haben, die Daten vergleichen zu können.
 
Hallo,

kommt darauf an, wie du dich einwählst.
Prinzipjell aber "ja kann man" im dümmsten fall, da immer Online eine Seite wie whatsmyip.de aufrufen und Parsen.

mfg
HeadCrash
 
1) Kurzes Script schreiben, daß die externe IP-adresse ausliest

2) Script direkt nach dem Aufbau einer Netzwerkverbindung ausführen lassen

Zu 1) Forensuche verwenden, da gab es einen längeren Thread dazu (und wahrscheinlich nicht nur einen) zu 2) Dokumentation Deiner Distribution bemühen, je nach Distributiuon und Verwaltungstool (NMW macht das anders als ifup) gibt es da unterschiedliche Möglichkeiten, wie man post-up Scripte einbauen kann.

Weitere Möglichkeit:

3) Script, welches per ping prüft, ob man online ist und dann die externe IP bestimmt, das dann in Verbindung mit cron.

4) Post-up Script, welches per Endlosschleife alle X Minuten die Aufgabe von 3 übernimmt und dann ohne cron.
 
1) Kurzes Script schreiben, daß die externe IP-adresse ausliest

2) Script direkt nach dem Aufbau einer Netzwerkverbindung ausführen lassen

Zu 1) Forensuche verwenden, da gab es einen längeren Thread dazu (und wahrscheinlich nicht nur einen) zu 2) Dokumentation Deiner Distribution bemühen, je nach Distributiuon und Verwaltungstool (NMW macht das anders als ifup) gibt es da unterschiedliche Möglichkeiten, wie man post-up Scripte einbauen kann.

Weitere Möglichkeit:

3) Script, welches per ping prüft, ob man online ist und dann die externe IP bestimmt, das dann in Verbindung mit cron.

4) Post-up Script, welches per Endlosschleife alle X Minuten die Aufgabe von 3 übernimmt und dann ohne cron.

Wenn sich schon jemand hier im Forum dem gleichen Problem angenommen hat, würd mich das sehr interessieren. Ich konnte allerdings nichts zu dem Thema mittels Suche finden, daher ja auch der Thread.
 
IP loggen

Hallo

Hab das hier gefunden

http://www.chmai.de/?p=251


sollte aber auch gehen, wenn man
ifconfg -a ppp0

die 2. Zeile mit "inet ADRESSE xyz" auswertet und in einer Datei mit Dateum und Zeit speichert.

mfg
schwedenmann
 
Danke. Das scheint die bisher brauchbarste Lösung zu sein. Leider habe ich keine Fritzbox und UPNP würde ich an meinem Router auch nie aktivieren :)
 
Schnellschuss:
Code:
#!/bin/sh
CURL_PATH="/usr/local/bin/curl -s"
IP=$(${CURL_PATH} http://ip.c0ders.org)
DATE=$(date +%d.%m.%Y)
TIME=$(date +%H:%M:%S)
echo "${DATE}\t${TIME}\t${IP}"
 
Hey danke!

Ich ätte da aber noch eine Frage zum Code: Was macht "\t" ? Soll das ein Trenner sein?
 
'\n' -> Zeilenumbruch
'\t' -> Ich kenne gerade gar nicht den Namen, aber das 'sortiert' die Ausgaben automatisch. Ähnliche wie im Editor mithilfe der TAB-Taste.
 
Hi,
'\t' -> Ich kenne gerade gar nicht den Namen, aber das 'sortiert' die Ausgaben automatisch. Ähnliche wie im Editor mithilfe der TAB-Taste.
hehe, ja genau, aehnlich wie die TAB-Taste, deswegen nennt es sich auch aehnlich wie die TAB-Taste, Tabulator, oder auch tab. ;)
Naja, genau genommen ist es andersrum, die Taste wurde nach der Funktion benannt...

Wobei caba_ da bei seinem Schnellschuss in der Eile auch noch das -e beim echo vergessen hat. ;)

mfg,
bytepool
 
Jetzt müsste ich noch irgendwie die IP nicht von ip.c0ders.org (also aus dem Internet) abfragen sondern direkt vom Router. Ich habe hier einen von der Telekom stehen, der auch die IP anzeigt ohne, dass ich mich mit einem Passwort einloggen müsste. Kann ich die Seite auch mit cURL holen und die benötigten Daten herausfiltern oder muss ich neben cURL noch grep o.ä. verwenden?
 
Wieso musst du die drekt vom router abfragen, sollte doch die selbe sein wie die im Inet was da angezeigt wird ;)
 
Da curl dir nur die Seite als HTML-Code zurückliefert, wirst du vermutlich nicht darum herumkommen die gewünschte Information mittels grep, awk udn ähnlichem herauszuschneiden und in dien Logfile zu schreiben.

mfg
HeadCrash
 
Wieso musst du die drekt vom router abfragen, sollte doch die selbe sein wie die im Inet was da angezeigt wird ;)
Das hoffe ich! :)

Der Hintergrund ist der:
Wenn ich das Skript jede Minute ausführe, geht das Skript auch dann ins Internet, wenn ich gar nicht drin bin. Ich bekomme also IPs die ich nur dafür gebraucht habe, um meine IP via Internet rauszufinden :)
Außerdem: Mein Router würde nie aus dem Netz gehen (Time-out ist auf 3 min gesetz) und ich würde immer die gleiche IP loggen.


Ich parse die IP nun mit cURL | grep | cut. Wäre mir aber lieber wenn ich auf grep und cut verzichten könnte.
Code:
IP=$(${CURL_PATH} ${URL} | grep Aktiv | cut -c9-)

Da curl dir nur die Seite als HTML-Code zurückliefert, wirst du vermutlich nicht darum herumkommen die gewünschte Information mittels grep, awk udn ähnlichem herauszuschneiden und in dien Logfile zu schreiben.

mfg
HeadCrash

//EDIT: Achso, ok. Hatte deinen Post nicht gelesen. Ich sollte schneller an Antworten schreiben :)


//EDIT 2:
Hier nun mein Skript. Ich will noch automatisieren, dass Zeilen die keine (gültige) IP enthalten gelöscht werden.
Code:
#!/bin/bash

##
## checks the external IP of your system by using cURL
##

# where to save the log
FILE="${HOME}/.EXTERNAL_IPs.log"
BACKUP_FILE="${HOME}/.EXTERNAL_IPs.log.bak"

CURL_PATH="/usr/bin/curl -s"
DATE=$(date +%Y.%m.%d)
TIME=$(date +%H:%M:%S)

# where to get the external IP from
# the web
#URL="http://checkip.dyndns.org/"
# directly from the home-router (Telekom Speedport):
URL="http://speedport.ip/cgi-bin/webcm?getpage=../html/top_status.htm"

# get the IP from the web
#IP=$(${CURL_PATH} ${URL} | grep Address | cut -c19-)
# get the IP from home-router
IP=$(${CURL_PATH} ${URL} | grep Aktiv | cut -c9-)

# format the output
OUTPUT=$(echo -e "${DATE}\t${TIME}\t${IP}")


# if $IP != 0 print date, time and external IP
if [ -n ${IP} ]
then
	echo -e "${OUTPUT}" >> ${FILE}
	echo -e "${OUTPUT}" >> ${BACKUP_FILE}
fi

exit 0
 
Zuletzt bearbeitet:
Dürfte das sein was du brauchst, das Script schaut alle 10 Minuten nach der eigenen externen WAN-IP.
Ist kein Internet verfügbar, wird nach 10 Minuten nochmal geschaut.
Die ermittelte IP wird nur geschrieben, wenn sie noch nicht im Log exisiert.

Code:
#!/bin/bash

LOG=/var/log/ip-adresse.log
touch $LOG

while true
do
	if [ $(ping -W 1 -c 1 heise.de > /dev/null 2>&1 ; echo $?) -eq 0 ]
	then
		current_ip=$(curl http://checkip.dyndns.org/ 2> /dev/null | awk '{print $6}' | awk -F"<" '{print $1}')
		DATE=$(date +%Y-%m-%d" "%H:%M:%S)
		if [ $(grep $current_ip $LOG  > /dev/null 2>&1; echo $?) -ne 0 ]
		then
			echo -ne "$DATE\t$current_ip\n" >> $LOG
		fi
	fi
sleep 600
done
 
Zuletzt bearbeitet:
Warum schickst du manche Ausgaben nach /dev/null ? Sie würden im log doch eh nicht auftauchen.

PS: Sollte man am Ende von Shellskripten "exit 0" schreiben oder ist das unrelevant?
 
Hi,

Warum schickst du manche Ausgaben nach /dev/null ? Sie würden im log doch eh nicht auftauchen.
die meisten shells machen einen Unterschied zwischen stdout und stderr (standard output, standard error), und das ist was er hier benutzt. Die bash hat ziemlich komplexe Moeglichkeiten fuer IO redirection, indem file descriptors verwendet werden. File descriptor 1 ist stdout, file descriptor 2 ist stderr, und der Rest kann mehr oder weniger beliebig vergeben werden, wenn ich mich nicht irre.

> ist equivalent zu 1>, d.h. stdout wird umgeleitet.
2>&1 bedeutet z.B. dass stderr zu stdout umgeleitet wird.

Mit anderen Worten, manchmal leitet er stdout um, manchmal stderr, je nachdem was du gerade fuer output haben willst.

Ah, jetzt hab ich das alles erklaert, und jetzt sehe ich dass es dir mehr um den Sinn ging, weil stderr und stdout nicht im Log auftauchen... Es ist schon spaet. ;)
Aber ich lass die Erklaerung mal stehen, vielleicht interessiert es ja doch jemanden. ;)

PS: Sollte man am Ende von Shellskripten "exit 0" schreiben oder ist das unrelevant?
Ich denke das ist Geschmacksache, 0 wird implizit zurueckgegeben wenn sich das Skript sauber beendet. Ich wuerde es aus Konsistenzgruenden so handhaben, dass 0 explizit zurueckgegeben wird, wenn irgendwo im Skript auch Errorstates (retVal > 0) zurueckgegeben werden. Das habe ich mir in Python so angewoehnt, weil das IMHO zu besser lesbarem Code fuehrt.

Je nachdem in welchem Kontext du programmierst gibt es sicherlich auch anerkannte Standards, aber ein "allgemeiner" Standard fuer Shell Skripte ist mir nicht bekannt.

mfg,
bytepool
 
Jetzt müsste ich noch irgendwie die IP nicht von ip.c0ders.org (also aus dem Internet) abfragen sondern direkt vom Router. Ich habe hier einen von der Telekom stehen, der auch die IP anzeigt ohne, dass ich mich mit einem Passwort einloggen müsste. Kann ich die Seite auch mit cURL holen und die benötigten Daten herausfiltern oder muss ich neben cURL noch grep o.ä. verwenden?

Nur so zu Info: Kein Internet == Keine IP.

Wenn der Router keine Verbindung zum Inet hat, hat er auch keine IP.

Also ist das eigentlich schwachsinn direkt vom Router abzufragen.

Und wenn du willst, das er das Skript nur ausführt, wenn du mit dem Inet verbunden ist, dann mach vorher eine If-Abfrage mit Ping...

Und wieso willst du dich vor Mahnungen schützen? Wenn du dich schon dagegen schützen willst, bzw die Vermutung hast welche zu bekommen, dann nützt dir auch nicht deine Ip's zu loggen :D

Und achja, fast 99% der Router loggen ihre Ip's automatisch mit, bis man den Log halt löscht (wie die Fritzboxen z.b).
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

Onlineumfrage programmieren (mehrseitige HTML Formular an PHP übergeben)

Zurück
Oben