web-dev-qa-db-fra.com

Pourquoi puis-je me connecter à http://127.0.0.1:8000/ mais pas à http://192.168.1.6/

J'exécute OS X Mountain Lion sur une machine avec l'adresse IP locale 192.168.1.6 (comme indiqué par l'utilitaire réseau et ifconfig) et j'exécute un serveur Web de développement local (Django) sur le port 8000 auquel je voudrais me connecter à partir d'une machine virtuelle exécutant un système d'exploitation invité sur la même machine.

Sur le système d'exploitation hôte (c'est-à-dire OS X fonctionnant sur le métal de la machine avec l'adresse 192.168.1.6), je peux me connecter à mon serveur Web de test via le navigateur en accédant à 127.0.0.1:8000; ou localhost: 8000; mais pas lors de l'utilisation de l'adresse IP locale de la machine. Voici ce qui rend cette confusion supplémentaire:

  • Le routeur ne filtre pas les ports; et, juste pour être sûr, je l'ai configuré pour transmettre explicitement les ports 8000 et 22 à 192.168.1.6; Et en parlant du port 22,
  • Lorsque je démarre le service SSH, je peux me connecter (à partir de la ligne de commande) via ssh 192.168.1.6
  • Ce n'est pas un problème de navigateur, car je ne peux pas non plus telnet au port 8000 192.168.1.6 (connexion refusée) alors que je peut telnet au port 8000 127.0.0.1, et je peux aussi telnet au 192.168.1.6 port 22
  • Le pare-feu est désactivé (comme indiqué dans les préférences système), mais pour plus de sécurité, j'ai également défini une règle ipfw pour autoriser tout

Voici les règles ipfw:

00100 allow tcp from any to any dst-port 8000
65535 allow ip from any to any

Voici une confirmation supplémentaire que le port est effectivement écouté par mon serveur de test:

netstat -an | grep 8000
tcp4       0      0  127.0.0.1.8000         *.*                    LISTEN 

alors qu'est-ce qui se passe ici? D'une manière ou d'une autre, le port 22 est traité différemment du port 8000, mais je ne peux trouver aucun endroit où trouver ces différences. Pourquoi ne puis-je pas accéder au port 8000 de cette machine en utilisant son adresse IP locale?

11
shanusmagnus

Lorsque vous démarrez Django serveur de développement, vous devez donner l'adresse explicitement:

python manage.py runserver 192.168.1.6:8000

Ou si vous souhaitez que le serveur s'exécute sur toutes les interfaces, vous pouvez utiliser:

python manage.py runserver 0.0.0.0:8000

Dans les autres cas, le serveur de développement Django par défaut s'exécute uniquement sur l'interface locale.

23
Ludwik Trammer