[PHP] Extern IP adres weergeven op lokale website

Pagina: 1
Acties:
  • 2.513 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik draai achter mijn router op een windows2k3 machine een apache webserver met PHP5.

Wat ik nu wil is dat op mijn lokale website, dat is mijn standaard start pagina als ik mijn browser start, ook direct mijn externe (internet) IP adres te zien krijg (wat je dus ziet bij www.whatismyip.com).
Als je een $_SERVER['REMOTE_ADDR'] gebruikt zie je alleen het lokale IP adres (192.168.xxx) van de client maar ik wil dus het Internet IP adres laten zien.

Ik heb een dynamisch IP adres wat helaas regelmatig ook echt veranderd, ik vind het dus erg handig dat direct bij het starten van mijn browser dus al mijn actuele IP adres te zien is op mijn lokale homepage.

Iemand een idee hoe dit eenvoudig in PHP te maken is?

Acties:
  • 0 Henk 'm!

  • burne
  • Registratie: Maart 2000
  • Niet online

burne

Mine! Waah!

Niet. Je lokale server weet niets van een buiten-IP, daar zorgt je router voor. Je enige kans is iemand die van buiten kijkt (zoals www.whatismyip.com) en het daaruit filteren en weergeven. Ik neem aan dat SNMP-en naar je router om het wan-IP te achterhalen je boven de pet gaat, als je NAT al niet begrijpt. Niet lullig bedoeld, het gaat om het vatten van concepten, en als NAT je al niet duidelijk is moet je een hoop (meer dan in dit topic past) studeren op netwerken.

Dus. Je huiswerkopgave is: schrijf iets in PHP wat een pagina opvraagt en er een IP-adres uitfiltert. Da's een leuke reguliere expressie om mee te beginnen. :) Niet valsspelen met google. :>

I don't like facts. They have a liberal bias.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet goed hoe NAT werkt en waarom ik niet het externe IP adres te zien krijg, ik zoek alleen een manier dat mijn webserver het IP wel achter haalt van mijn internet verbinding zonder al te ingewikkelde scripts te hoeven maken. Maar het komt er denk ik op neer dat ik dus gewoon whatismyip.com moet gaan uitlezen, dat wilde ik dus eigenlijk net niet.

Ik had gehoopt dat er een PHP commando of manier was om dit simpel te kunnen doen, of mijn router snmp ondersteund weet ik eerlijk gezegd niet (ik denk van niet) maar dit is inderdaad ook een manier.
Ik zal eens een snmp walktrough doen op de router, kijken wat er gebeurd.

PS
Over je huiswerk, zo'n PHP n00b ben ik nou ook weer niet.....

Acties:
  • 0 Henk 'm!

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 07-09 02:15

Jimbolino

troep.com

makkelijke oplossing: zet op een random (externe) webserver een bestandje neer dat alleen je ipadres terug echo't, en fget dat en parse de regels. Iedere phper met een eigen domein heeft wel een site als deze: http://ip.troep.com/

andere oplossing: stel in je router een dyndns in en laat deze naam door php resolven.

suc6

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Acties:
  • 0 Henk 'm!

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Als je server vanaf buiten te bereiken doet $_SERVER["SERVER_ADDR"] het ook waarschijnlijk. Of schrijf iets dat bijvoorbeeld www.watismijnip.nl opvraagt en het IP adres met een reguliere expressie eruit haalt, da's niet zo ingewikkeld. Zou zo iets worden:

PHP:
1
2
3
$example = "Uw IP-Adres: <b>123.456.789.0</b>";
preg_match("/Uw IP-Adres: <b>([0-9\.]+)<\/b>/i", $example, $matches);
$ip = $matches[1];

Weet alleen niet of je misschien nog meer tekens moet escapen in de reguliere expressie, volgens mij niet :)

[ Voor 12% gewijzigd door Mafkees op 19-12-2006 08:33 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 11-09 13:55
PHP:
1
2
3
4
5
6
$ip = file_get_contents("http://www.watismijnip.nl/");
if(eregi("[12]?[0-9]{1,2}\.[12]?[0-9]{1,2}\.[12]?[0-9]{1,2}\.[12]?[0-9]{1,2}", $ip, $reg)) {
  $ip = $reg[0]
} else {
  $ip = null;
}

denkfouten voorbehouden ^^
Mooier is natuurlijk om het via SNMP uit je router te lezen, zoals burne al zei, maar aangezien je daar niet op inging ga ik er van dat je daar neits voor voelt.

[ Voor 5% gewijzigd door frickY op 19-12-2006 08:38 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:54

Janoz

Moderator Devschuur®

!litemod

Mafkees schreef op dinsdag 19 december 2006 @ 08:32:
Als je server vanaf buiten te bereiken doet $_SERVER["SERVER_ADDR"] het ook waarschijnlijk.
Zijn webserver staat ook achter de router. Het server adres is dus ook gewoon een intern IP adres.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou ik moet voor de snmp nog kijken, toen ik replyde ging ik net naar bed.
Ik betwijfel of mijn router snmp onder steund.

En inderdaad de webserver staat ook achter de router.

Situatie: pc -> webserver -> router -> internet

Maar er zijn al een paar tips gegeven waaraan ik niet gedacht heb die ik vanmiddag ga proberen.
Beste zou inderdaad zijn het uitlezen van de router maar zoals vermeld volgens mij ondersteun mijn router geen snmp. (Ik heb deze router toevallig net 4 dagen, zover heb ik nog niet gespeeld met dat ding, het is de netgear WPN824 v2)

Acties:
  • 0 Henk 'm!

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 11-09 14:14

Tjark

DON'T PANIC

Ik neem aan dat je dus geen vast IP adres hebt, anders zou je 't net zo goed vast kunnen zetten in je html ;)

Misschien iets 'vies' doen als:
- op je server een dyndns proggie installeren dat altijd je dns aan een dyndns server geeft. ( zoiets als no-ip.com )
- dan in php:
PHP:
1
$ip = gethostbyname('b3rt.no-ip.com');

*insert signature here


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee klopt ik heb geen vast IP, daarom wil ik ook juist het IP zien op mijn startpagina.
Op die manier weet ik wat voor IP ik nu weer heb en als het is veranderd zie ik dat ook direct, gelukkig veranderd mijn IP niet elke dag maar wel vaak.

Ik ga wat spelen met de diverse opties, kijken of er 1 goed werkt.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 19 december 2006 @ 14:02:
Nee klopt ik heb geen vast IP, daarom wil ik ook juist het IP zien op mijn startpagina.
Op die manier weet ik wat voor IP ik nu weer heb en als het is veranderd zie ik dat ook direct, gelukkig veranderd mijn IP niet elke dag maar wel vaak.

Ik ga wat spelen met de diverse opties, kijken of er 1 goed werkt.
Als je ergens een webserver ter beschikking hebt op het internet kan daar een phpbestandje in zetten:
PHP:
1
2
3
<?php
echo $_SERVER['REMOTE_ADDR'];
?>


Die lees je uit en klaar? :)

Acties:
  • 0 Henk 'm!

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 11-09 14:14

Tjark

DON'T PANIC

Verwijderd schreef op dinsdag 19 december 2006 @ 14:02:
Nee klopt ik heb geen vast IP, daarom wil ik ook juist het IP zien op mijn startpagina.
Op die manier weet ik wat voor IP ik nu weer heb en als het is veranderd zie ik dat ook direct, gelukkig veranderd mijn IP niet elke dag maar wel vaak.

Ik ga wat spelen met de diverse opties, kijken of er 1 goed werkt.
maar ff een vraag? waarom wil je dat dan weten?
Als je ip nu als steeds veranderd hoe ga jij van buitenaf dan naar je webserver toe?

als je dan toch een 'name' gebruikt, dan kun je toch gethostbyname gebruiken in je PHP???

*insert signature here


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is een interne webserver.
Deze is vooral bedoeld voor de pc's op mijn netwerk, hierop test ik wat scripjes en heb een persoonlijk pagina met mijn favoriete links (een soort start pagina) etc.

Het is dus niet de bedoeling dat er vanaf buitenaf naar de webserver wordt geconnect, deze is echt alleen voor intern gebruik.

Acties:
  • 0 Henk 'm!

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 18:17
Je kan, ipv whatsmyip.com, toch ook de statuspagina van je router lezen en parsen? Hoef je ook niet met SNMP aan de slag.

Whatever


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het werkend, ik heb bij dyndns een account aangemaakt en ik vraag nu gewoon het ip op via php van dit domein. Dit werkt prima tot nu toe.
Mijn router update vanzelf het IP bij dyndns mocht dit weer wijzigen

Acties:
  • 0 Henk 'm!

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 07-09 02:15

Jimbolino

troep.com

Verwijderd schreef op dinsdag 19 december 2006 @ 18:07:
Ik heb het werkend, ik heb bij dyndns een account aangemaakt en ik vraag nu gewoon het ip op via php van dit domein. Dit werkt prima tot nu toe.
Mijn router update vanzelf het IP bij dyndns mocht dit weer wijzigen
als je webserver op een pc draait die dns requests cached (bijvoorbeeld omdat hij als dns server fungeert, of als het een windows pc is waar de service "DNS client" is gestart) dan kan het soms tot een paar uur duren voordat hij het nieuwe ip adres door heeft gekregen...

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 19 december 2006 @ 17:32:
Het is een interne webserver.
Deze is vooral bedoeld voor de pc's op mijn netwerk, hierop test ik wat scripjes en heb een persoonlijk pagina met mijn favoriete links (een soort start pagina) etc.

Het is dus niet de bedoeling dat er vanaf buitenaf naar de webserver wordt geconnect, deze is echt alleen voor intern gebruik.
Hoe ik het zei word dat ook niet gedaan, dan word er alleen maar vanaf hem naar buiten geconnect. Anders is het niet te doen lijkt me, als hij geen toegang heeft tot het internet heeft hij ook geen extern ip.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Jimbolino
Nee er draait geen DNS op die server, het is gewoon een standaard w2k3 setup met daarop apache/php/mysql

@Gdo0
Nee het werkt nu met $ip = gethostbyname('b3rt.no-ip.com');
Hij vraagt IP op van mijn dyndns hostname en die laat ie dan zien.
De server heeft wel toegang tot Internet alleen de website die erop draait is niet bereikbaar vanaf Internet, ik het de poorten niet gemapped in de router voor de webserver.
De website is enkel binnen mijn LAN te bereiken (dat is ook de bedoeling)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 20 december 2006 @ 01:45:
@Jimbolino
Nee er draait geen DNS op die server, het is gewoon een standaard w2k3 setup met daarop apache/php/mysql

@Gdo0
Nee het werkt nu met $ip = gethostbyname('b3rt.no-ip.com');
Hij vraagt IP op van mijn dyndns hostname en die laat ie dan zien.
De server heeft wel toegang tot Internet alleen de website die erop draait is niet bereikbaar vanaf Internet, ik het de poorten niet gemapped in de router voor de webserver.
De website is enkel binnen mijn LAN te bereiken (dat is ook de bedoeling)
dat no-ip.com is toch lastiger dan 1 bestandje aanmaken en die later uitlezen met file_get_contents()? |:(

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Lastiger?
$ip = gethostbyname('b3rt.no-ip.com');
print $ip;

Bij dyndns registreer je een gratis account, je krijg een hostname van ze en die vraag je dan op met ovenstaande code Wat is daar lastig aan?
Mijn router ondersteund dyndns dus zodra mijn IP wijzigd wordt dit automatisch aangepast.

Ik zie dus niet wat er lastig aan is, werkt prima tot nu toe
Pagina: 1