dynamische ip auslesen und zum automatischen starten des browsers benutzen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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.

  • dynamische ip auslesen und zum automatischen starten des browsers benutzen? Schau mal ob du hier fündig wirst!

  • 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

    3 Mal editiert, zuletzt von FSC830 (31. Dezember 2020 um 01:48)

  • 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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • 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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • 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.

  • 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.

    ...

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

    chronium --fullscreen http://%24ip4

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

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • 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.

    Computer ..... grrrrrr

  • 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.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (31. Dezember 2020 um 17:22)

  • 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)

    Computer ..... grrrrrr

  • 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
    Zitat

    -i, --ip-address

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

    resolved.

    Zitat

    -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

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (31. Dezember 2020 um 17:42)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!