Waarom kan ik wel verbinding maken met http://127.0.0.1:8000/ maar niet met http://192.168.1.6/

Ik gebruik OS X Mountain Lion op een machine met lokaal IP-adres 192.168.1.6 (zoals gerapporteerd door zowel het netwerkhulpprogramma als ifconfig) en ik gebruik een lokale (Django) ontwikkelingswebserver op poort 8000 die ik zou willen hebben om verbinding mee te maken vanaf een virtuele machine met een gastbesturingssysteem op dezelfde machine.

Op het host-besturingssysteem (dwz OS X draait op het metaal van de machine met adres 192.168.1.6) kan ik verbinding maken met mijn testwebserver via de browser door naar 127.0.0.1:8000 te gaan; of localhost:8000; maar niet bij gebruik van het lokale IP-adres van de machine. Dit is wat dit extra verwarrend maakt:

  • De router filtert de poorten niet; en voor de zekerheid heb ik het zo ingesteld dat poorten 8000 en 22 expliciet worden doorgestuurd naar 192.168.1.6; En over poort 22 gesproken,
  • Als ik de SSH-service start, kan ik verbinding maken (vanaf de opdrachtregel) via ssh 192.168.1.6
  • Het is geen browserprobleem, want ik kan ook niet telnetten naar 192.168.1.6 poort 8000 (verbinding geweigerd) terwijl ik kantelnetten naar 127.0.0.1 poort 8000, en ik kan ook telnetten naar 192.168.1.6 poort 22
  • De firewall is uitgeschakeld (zoals vermeld in Systeemvoorkeuren) maar om extra veilig te zijn, heb ik ook een ipfw-regel ingesteld om alles door te laten

Dit zijn de ipfw-regels:

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

Hier is een aanvullende bevestiging dat er inderdaad naar de poort wordt geluisterd door mijn testserver:

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

dus wat is hier aan de hand? Op de een of andere manier wordt poort 22 anders behandeld dan poort 8000, maar op elke plek die ik kan bedenken om naar die verschillen te zoeken, kan ik er geen vinden. Waarom kan ik niet op poort 8000 van deze machine komen met het lokale ip-adres?


Antwoord 1, autoriteit 100%

Wanneer u de Django-ontwikkelserver start, moet u het adres expliciet opgeven:

python manage.py runserver 192.168.1.6:8000

Of als u wilt dat de server op alle interfaces draait die u kunt gebruiken:

python manage.py runserver 0.0.0.0:8000

In andere gevallen draait de Django-ontwikkelserver standaard alleen op de lokale interface.


Antwoord 2, autoriteit 4%

Het probleem voor mij was dat ik per ongeluk de server afsluit wanneer ik het serveradres probeerde te kopiëren. Dus in plaats van ctrl+Cte gebruiken, noteert u gewoon het adres in uw browser.


Antwoord 3

Ik heb het probleem opgelost. Er zijn een paar dingen die je misschien mist. Ze hieronder opsommen-

1.Zodra de server is gestart, drukt u in ieder geval niet op Ctrl+C. U kunt erop drukken om naar de url te kopiëren en dat sluit per ongeluk de server waardoor dit kan gebeuren.

2.in plaats van http://127.0.0.1:8000/…wijzig de poort nummer naar http://127.0.0.1:8080/…Dat zou werken.

3.Probeer de firewall-instelling te wijzigen en sta de app toe.

4.Probeer het met verschillende browsers en ook incognito te openen.

De bovenstaande stappen hebben geholpen bij het oplossen van mijn probleem. Ik hoop dat ze jou ook helpen… 🙂

Other episodes