Mac OS X Yosemite'de yerel ana bilgisayar adlarını kıvırın


30

Mavericks'ten Yosemite'ye yeni geçtim ve artık curlgeridöngü ana bilgisayar adlarını göremiyorum.

Test etmek için basit bir http sunucusu kurun:

$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

Şimdi 8000 krom ile localhost'a vurabilirim. Bunu bile unutabilirim. Ancak kıvrılma, bu olur:

$ curl localhost:8000
curl: (7) Failed to connect to localhost port 8000: Connection refused

Ancak, bu çalışır:

$ curl 127.0.0.1:8000

Wget proxy ayarları hakkındaki bu cevabı okudum , ancak işe yaramadı, çünkü işe yaramadı:

$ wget --proxy=off localhost:8000

Bu gerçekten sinir bozucu, çünkü dosyamda listelenen birkaç farklı geridöngü ana bilgisayar adı var, /etc/hostsböylece yerel olarak uygulamalar geliştirebilirim ve bunları curl ile hata ayıklamaya alışkınım.

Osx ile gelen curl sürümünü denedim:

$ curl --version
curl 7.37.1 (x86_64-apple-darwin14.0) libcurl/7.37.1 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz

$ curl localhost:8000
curl: (7) Failed to connect to localhost port 8000: Connection refused

$ curl 127.0.0.1 # works

Ve brew ile curl derlemeye çalıştım:

$ /usr/local/Cellar/curl/7.38.0/bin/curl --version
curl 7.38.0 (x86_64-apple-darwin14.0.0) libcurl/7.38.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz

$ /usr/local/Cellar/curl/7.38.0/bin/curl localhost:8000
curl: (7) Failed to connect to localhost port 8000: Connection refused

$ /usr/local/Cellar/curl/7.38.0/bin/curl 127.0.0.1:8000 # works

Bir node.js uygulamasının test edilmesinde benzer bir sorunla karşılaştım. Düğümün hata ayıklama işleminin 0.0.0.0'a bağlandığını söyledi ve -4 kıvrımlı yerel evreni ... denedi ve çalıştı, fakat -4 olmadan başarısız oldu. IPv6 adresinin IPv4 adresinden önce / etc / hosts dosyasından çözüldüğü görülüyor.
Neth

Nick'i tarif ettiğin aynı sorunu yaşıyorum.
nerdburn

Yanıtlar:


36

Sadece / etc / hosts dosyasındaki IPv6 geridöngü satırlarından birini yorumlayarak çalışmaya başladım:

#fe80::1%lo0    localhost

Artık geridöngü ana bilgisayarlarımın tümü çalışıyor, yalnızca yerel ana bilgisayar değil. Acaba bunun nesi var?


Bunu yaşadım ve bana da yardımcı oldu. Bu çizgiyle ne ilgin var bilmiyorum; Sistemimde Yosemite’den önceki gibi görünüyordu.
mislav

Çok teşekkür ederim. Yine de, neden özünde IPv4 üzerinden geridönüş aygıtı için IPv6'yı tercih ettiğini merak ediyorum. Bu sadece benim için Yosemite’de olmaya başladı.
lukecampbell

24

Alternatif (sudo veya değiştirme gerektirmez /etc/hosts) - kıvrılma daha akıllı hale gelinceye kadar her zaman ipv4 kullanın.

$ echo '--ipv4' >> ~/.curlrc

(daha sonra her şey istediğiniz gibi çalışacaktır)


Teşekkürler - bu problem beni çıldırtıyordu, ama çözümün mükemmel sonuç verdi.
Kyle Fox,

2

Her şeyden önce, 0.0.0.0"herhangi bir IPv4 adresi" anlamına gelen özel bir adrestir.

Bir soket IPv4 veya IPv6 protokolüne bağlanabilir. Bir soket bağlıysa 0.0.0.0, bu, bağlanmaya çalışan herhangi bir IPv4'ü dinleyeceği ve aşağıdaki şekilde temsil edileceği anlamına gelir:

$ nc -l 0.0.0.0 8085
$ lsof -i4 -Pnl | grep 8085
  nc        23994 [xxx]    3u  IPv4 [xxx]      0t0  TCP *:8085 (LISTEN)

*İşareti eşdeğerdir 0.0.0.0IPv4 üzerinde.

IPv6 için:

$ nc -l :: 8085
$ lsof -i6 -Pnl | grep 8085
  nc        24145 [xxx]    3u  IPv6 [xxx]      0t0  TCP *:8085 (LISTEN)

*İşareti eşdeğerdir ::, IPv6 üzerinde resmi şartnamede olarak .

Bunun nedeni ise curlrastgele etmek çözümlemeye çalışır localhostgirişin /etc/hostsve @NickRetallack belirtildiği gibi, bu giriş seçtiği biridir curlçözümlerken localhost(ilk giderir neyse assumedly IPv6 veya IPv4) varsayılan modda.

Bunu Zorlamak --ipv4@CharlesHebdough önerildiği gibi, yapacak, mod curlkararlılığını localhostiçin 127.0.0.1(başka IPv4 girişleri için vardır varsayarak localhostiçinde /etc/hosts).

Her uygulama localhostistedikleri gibi çözülecektir , bu nedenle neden farklı araçlarla aralıklı olarak başarı elde ettiniz?

Mümkün olan en kesin olmak için 127.0.0.1, localhost yerine kullanın , ancak sizi IPv4'e bağlar. localhostHem IPv6 hem de IPv4 protokollerinde çalışma esnekliği sağlar, ancak bazı uygulamalarda bu özel sürümde olduğu gibi sorun yaşayabilirsiniz curl.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.