2011-06-25 5 views
5

en supposant que php est en cours d'exécution en mode Web via cgi/mod_php/etc ...

est-il sûr de supposer que $ _SERVER [ « REMOTE_ADDR »] existera, et encore plus, qu'il contiendra stylisé correctement (désolé, la terminologie peut être ici ...) ip (1.1.1.1 -> 255.255.255.255?)?

ce n'est pas une question concernant la météo, l'ip contenue dans $ _SERVER ['REMOTE_ADDR'] sera la véritable adresse IP du client qui fait la demande, car je comprends que cela peut être 'spoofé' en modifiant le tcp sortant paquets ...

tout simplement:

a) va $ _SERVER [ 'REMOTE_ADDR'] existent toujours si php est exécuté en mode web. b) si $ _SERVER ['REMOTE_ADDR'] existe toujours, contiendra-t-il toujours une adresse IP correctement codée?

merci.

+0

Bonne question - Je pense que la réponse est "oui" sur les deux points, mais je ne suis pas totalement sûr de [IPV6] (http://en.wikipedia.org/wiki/IPV6). Par curiosité, pourquoi avez-vous besoin de savoir? À quel moment auriez-vous des ennuis si ce n'était * pas * une adresse IP correctement formatée? –

+0

juste en passant le code qui a été en cours d'exécution (en cours d'exécution, bien) depuis des années, mais a été la validation de cette information via: isset ($ _ SERVER ....) +^([1-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] | 25 [0-5]) (\. ([0-9] | [1- 9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [25] [0-5])) {3}^ cela semble être complètement inutile –

+0

en ce qui concerne la conformité ipv6 ... ipv6 est désactivé sur la boîte qui exécute ce code, donc étaient ok (pour le moment) sur ce front ... merci encore! –

Répondre

6

Oui, il est toujours présent en mode Web, et puisque l'adresse IP est convertie de sa représentation binaire au format textuel que vous voyez, il est toujours valide – il n'y a aucun moyen de spécifier une adresse IP invalide dans le En-tête IP

Encore une chose: N'assumez aucun format spécial sauf si vous devez absolument traiter les adresses IP. Par exemple, les adresses IPv6 sont plus longues et contiennent des caractères différents. Fondamentalement, traiter les adresses IP comme une chaîne opaque.

+0

merci beaucoup! –

+0

Je sais que c'est plus d'un an. Mais, je lance un serveur qui utilise ip2long pour stocker des informations sur chaque visite dans une base de données. Mon code est '$ ip = ip2long ($ _ SERVER ['REMOTE_ADDR'])', et j'ai trouvé $ ip égal à 0. Pourquoi cela arriverait-il? – Kayla

+0

Nevermind mon dernier commentaire. Ma base de données n'acceptait pas les nombres négatifs. ** Sachez que ip2long peut renvoyer un résultat négatif. ** – Kayla

Questions connexes