dynamische ip auslesen und zum automatischen starten des browsers benutzen

  • hi@ alle


    ich bräuchte da ein wenig hilfe bei einem kleinen problem.

    problembeschreibung:


    ich möchte eine webseite - ähnlich eines kiosk-systems - automatisch starten lassen.

    problem daran ist das die ip dynamisch vergeben wird, da der pi in verschedenen netzwerken zum einsatz kommen soll und die benutzer keine computerahnung haben.

    die ip wird auch benötigt, um die seite aufzurufen, da kein lokaler dns-server verfügbar ist. die seite soll nur im lokalen netzwerk verfügbar sein. also kein portforwarding im router oder dyndns.org oder ähnliches.


    also die idee ist entweder als shellscript, die ip-addresse auslesen und den browsr damit starten. (da fehlt mir aber das wissen dazu.)

    oder die seite startet automatisch mit localhost in der url-zeile und die seite liesst dann die ip-addresse aus, so das der nutzer die ip-addresse abtippen kann.


    also bei idee 2 scheitert es daran , das php dann immer nur localhost, 127.0.0.1 oder ::1 auswirft und nicht die dynamische ip-adresse vom router.


    vielen dank für jede zielführende hilfe oder ideen zum selber lösen.:danke_ATDE:

    die wahrheit will keiner hören oder lesen.

  • Mit ifconfig -a wird die IP angezeigt.

    Ich nehme an, der PI ist über LAN (oder WLAN?) verbunden.

    Bei LAN ist die IP unter eth0 zu finden, bei WLAN unter wlan0.

    Mit einem passenden Script kannst Du die IP auslesen. Sie müsste dann als Variable der Webseite übergeben werden.

    Wenn ich mich richtig erinnere (meine PHP Zeiten sind einige Jahre her), kann die IP auch direkt mit PHP ausgelesen werden.

    Die musst Du dann irgendwie auf der Webseite mit einbauen.

    Wäre auf die Schnelle meine Idee dazu.


    Gruss


    Edit: ifconfig ist veraltet, das war die Macht der Gewohnheit :rolleyes:, manche Befehle benutzt man einfach immer noch.

    ip ist der Stand der Dinge ;).

    Z.B. wirft Dir das die IPv4 für eth0 aus:

    Code
    ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) ; echo $ip4

    Edited 3 times, last by FSC830 ().

  • Z.B. wirft Dir das die IPv4 für eth0 aus:

    Code
    ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) ; echo $ip4

    Wenn das Interface 2 IP-Adressen hat, werden damit beide gezeigt.

    Wenn die lokale Namensauflösung möglich ist bzw. funktioniert, kann man auch "hostname -i" benutzen.

    Code
    :~ $ ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) ; echo $ip4
    192.168.178.13 192.168.174.24
    Code
    :~ $ hostname -i
    192.168.178.13

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • also die idee ist entweder als shellscript, die ip-addresse auslesen und den browsr damit starten. ...

    Mit xmessage und einer timer-unit könntest Du die IP-Adresse auch anzeigen/mitteilen lassen. Z. B.:

    Bash
    #!/bin/bash -e
    #
    /usr/bin/xmessage -display 127.0.0.1:0 -geometry 600x200 -center -buttons $(hostname -i) \
    -font -*-fixed-bold-*-*-*-*-300-*-*-*-*-iso8859-2 -bg yellow -bd green -fg blue -timeout 600 \
    -title "IP-Adresse" \
    IP-Adresse:
    exit 0

    (timeout (in Sekunden) kann ändert werden)

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) ; echo $ip4

    das hab ich auch gefunden und funktioniert auch zum auslesen.


    also soweit ich das verstehe die ip so auslesen in eine variable übergeben und dann den browser mit der variablen aufrufen?

    mit php lese ich die ip so aus

    Code
    $ip = getenv("SERVER_ADDR");

    das gibt aber nur die richtige ip aus, wenn die richtige ip schon in der url-leiste steht.

    auch mit dem $-SERVER-array oder gethostbyname benutze in php kommt nur das selbe raus.

    scheint nur über ein shellscript zu funktionieren.

    die wahrheit will keiner hören oder lesen.

  • Mit xmessage und einer timer-unit könntest Du die IP-Adresse auch anzeigen/mitteilen lassen. Z. B.:

    Bash
    #!/bin/bash -e
    #
    /usr/bin/xmessage -display 127.0.0.1:0 -geometry 600x200 -center -buttons $(hostname -i) \
    -font -*-fixed-bold-*-*-*-*-300-*-*-*-*-iso8859-2 -bg yellow -bd green -fg blue -timeout 600 \
    -title "IP-Adresse" \
    IP-Adresse:
    exit 0

    (timeout (in Sekunden) kann ändert werden)

    also ich wollte das bashscript hier mal ausprobieren, aber irgendwie funktioniert das nicht.

    ich hab das script in eine test.sh kopiert und im dateibrowser eingestellt das es ausführbar ist.

    wenn ich es versuche im terminal aufzurufen, kommt das das kommando nicht gefunden wurde.

    und wenn ich es doppel-klicke im datei-browser kommt die frage für ausführen oder im terminal ausführen.

    bei ausführen passiert gar nichts und bei terminal kommt kurz ein teminalfenster aber es verschwindet sofort wieder.

    das ist genauso wie, wenn ich versuche destop icons zu erstellen.

    die wahrheit will keiner hören oder lesen.

  • also die idee ist jetzt ein shellscript in der art

    Bash
    #!/bin/bash -e
    #
    ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
    chronium --fullscreen http://$ip4
    exit 0

    mag programmier-technisch noch nicht ganz korrekt sein.

    das dann in autostart einfügen, wie das geht kann ich im internet nachlesen.

    in der version muss der user gar nichts mehr tun, das wäre perfekt.

    die wahrheit will keiner hören oder lesen.

  • Warum bindest du den Webserver nicht einfach an 127.0.0.1/localhost statt an seine externe IP und fertig?

    Menschen die keine Ironie verstehen finde ich super!

  • Warum bindest du den Webserver nicht einfach an 127.0.0.1/localhost statt an seine externe IP und fertig?

    weil dann die seite nicht mehr funktioniert und auch sicher nicht von anderen computern im netzwerk aufgerufen werden kann.

    die wahrheit will keiner hören oder lesen.

  • bei mir kommt da 127.0.1.1 raus

    Dann machst du das lokal und ohne Netzwerk-Anschluss, oder?

    Code
    man hostname
    ......
    -i, --ip-address
        Display the network address(es) of the host name. Note that this works only if the host name can be resolved. Avoid using this option; use hostname --all-ip-addresses instead. 
    -I, --all-ip-addresses
        Display all network addresses of the host. This option enumerates all configured addresses on all network interfaces. The loopback interface and IPv6 link-local addresses are omitted. Contrary to option -i, this option does not depend on name resolution. Do not make any assumptions about the order of the output. 


    weil dann die seite nicht mehr funktioniert und auch sicher nicht von anderen computern im netzwerk aufgerufen werden kann.

    Latürnich. Wenn du beim Webserver keine spezielle Adresse angibst, dann sagt der das vielleicht, doch aus dm Netz erreichst du ihn.

    Wie announced du denn die IP des Webservers im jeweiligen Netz? Das lokale Aufrufen hat damit primär ja nichts zu tun.

    Wenn der PI im lokalen Netz eine IP bekommt, und die dazugehörende Hardware nicht zu alt ist, dann sollte der Name des PI mitels 'mdns' im lokalen Netz gefunden werden.

    Selber denken,
    wie kann man nur?

  • Name des PI mitels 'mdns' im lokalen Netz gefunden werden.

    Wenn mdns verlässlich funktioniert/funktionieren würde, kann man sich den Aufwand mit der eigenen IP sparen, weil der PI sich dann darüber selbst findet.

    Menschen die keine Ironie verstehen finde ich super!

  • Dann machst du das lokal und ohne Netzwerk-Anschluss, oder?

    Code
    man hostname
    ......
    -i, --ip-address
        Display the network address(es) of the host name. Note that this works only if the host name can be resolved. Avoid using this option; use hostname --all-ip-addresses instead. 
    -I, --all-ip-addresses
        Display all network addresses of the host. This option enumerates all configured addresses on all network interfaces. The loopback interface and IPv6 link-local addresses are omitted. Contrary to option -i, this option does not depend on name resolution. Do not make any assumptions about the order of the output. 


    Latürnich. Wenn du beim Webserver keine spezielle Adresse angibst, dann sagt der das vielleicht, doch aus dm Netz erreichst du ihn.

    Wenn der PI im lokalen Netz eine IP bekommt, und die dazugehörende Hardware nicht zu alt ist, dann sollte der Name des PI mitels 'mdns' im lokalen Netz gefunden werden.

    der pi ist mit meinem lokalen netzwerk verbunden ich schreibe ja gerade via vnc-remote desktop von einem anderen pi darauf.

    in meinem netzwerk haben alle pis feste ips so kann ich die aufrufen ohne dns.

    der plan ist das aber wenn das bei einem anderen im netzwerk laufen soll das sich das system automatisch alleine an das netzwerk anpasst ohne weitere nutzer eingaben. so nach dem motto einstöpseln, starten und läuft. also maximaler nutzer komfort.

    was ist mdns - so eine art minidns-server?


    wenn ich -I statt -i benutz kommt die richtige ip-addresse.

    die wahrheit will keiner hören oder lesen.

  • was ist mdns

    https://de.wikipedia.org/wiki/Zeroconf#Multicast_DNS


    der plan ist das aber wenn das bei einem anderen im netzwerk laufen soll das sich das system automatisch alleine an das netzwerk anpasst ohne weitere nutzer eingaben. so nach dem motto einstöpseln, starten und läuft.

    Das klingt aber einfacher, als es ist. Dazu musst du erstmal wissen, welche Möglichkeiten in allen Zielnetzen gegeben sind. Der Aufruf des Browsers ist dann sicherlich nicht das primäre Problem.

    Menschen die keine Ironie verstehen finde ich super!

    Edited once, last by llutz ().

  • https://de.wikipedia.org/wiki/Zeroconf#Multicast_DNS


    Das klingt aber einfacher, als es ist. Dazu musst du erstmal wissen, welche Möglichkeiten in allen Zielnetzen gegeben sind. Der Aufruf des Browsers ist dann sicherlich nicht das primäre Problem.

    ist interessant zum lesen.

    soweit ich das verstehe suchen sich dann die rechner eine addresse im 169. er bereich - damit passen die aber nicht in ein standard nicht routbares netzwerk von standard routern die im 192. bereich sind. dann würde da ein nat-problem auftauchen oder ein router dazwischen geschaltet werden, was ja auch irgendwie nat ist.

    die wahrheit will keiner hören oder lesen.

  • Wenn der PI sich per DHCP eine IP-Adresse beim zuständigen DHCP-Server holt, sagt er, wie er sich nennt (was bei zu vielen Rechnern, die 'raspberry' heißen, Probleme macht, sie über den Namen zu erreichen))

    Und DHCP-Server, die auch DNS-Server im lokalen Netz sind, nutzen diese Namen, um das System anzusprechen.


    (mdns macht mehr als nur unter Zeroconfig zu laufen)

    Selber denken,
    wie kann man nur?

  • wenn ich -I statt -i benutz kommt die richtige ip-addresse.

    Wenn es mit i (kleines i) nicht funktioniert, aber mit I (großes i) funktioniert, dann ist auf deinem PI die Namensauflösung für hostname nicht möglich.

    Z. B.:

    Code
    :~$ host $(hostname)
    <host Name> has address 192.168.178.22
    Quote

    -i, --ip-address

    Display the network address(es) of the host name. Note that this works only if the host name can be

    resolved.

    Quote

    -I, --all-ip-addresses

    Display all network addresses of the host. This option enumerates all configured addresses on all net‐

    work interfaces. .... Contrary to option

    -i, this option does not depend on name resolution.

    Mit "-I" hast Du ein Problem, wenn dein PI mehrere IP-Adressen hat. Z. B.:

    Code
    :~$ hostname -I
    192.168.178.22 192.168.33.14 192.168.22.14 192.168.44.14 10.88.0.2 


    EDIT:


    Wie sind auf deinem PI, die Ausgaben von:

    Code
    hostname
    host $(hostname)

    ?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Edited once, last by rpi444 ().