Impossible d'envoyer une requête ping à l'hôte local après la migration vers un nouveau Mac

2

Après la migration vers un nouveau MacBook Pro, je ne peux plus utiliser de ping localhost.

J'ai déjà essayé de changer de /etc/hosts déposer alors que c’était déjà juste avant.

$ host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1
$ ping localhost.
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.098 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.081 ms

Ping localhost. fonctionne en quelque sorte, je ne comprends pas pourquoi.

Si je redémarre le système, il ne sera pas résolu localhost encore une fois, mais si je ping localhost. puis ping localhost commence à travailler. Ne sais pas si cela peut aider quelqu'un avec le même problème

Quel pourrait être le problème?

$ ping localhost
ping: cannot resolve localhost: Unknown host
$ ping localhost.
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.072 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.077 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.073 ms
^C
--- localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.072/0.076/0.084/0.005 ms
$ ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.070 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.072 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.088 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.082 ms
^C
--- localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss

Plus de résultats

MBPdeFrancisco:~ francisco$ dscacheutil -q host -a name localhost
name: localhost
ipv6_address: fe80:1::1
MBPdeFrancisco:~ francisco$ LC_ALL=C cat -vet /etc/hosts
##$
##$
# Host Database$
#$
# localhost is used to configure the loopback interface$
# when the system is booting. Do not change this entry.$
##$
127.0.0.1 localhostM-bM-^@M-($
255.255.255.255 broadcasthostM-bM-^@M-($
::1 localhostM-bM-^@M-($
fe80::1%lo0 localhost

MBPdeFrancisco:~ francisco$ cat /etc/resolv.conf
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#
domain lan
nameserver 2001:8a0:ddce:7401:9e97:26ff:fedb:6214
nameserver 192.168.1.254
Luce Sky Walker
la source
quelle est la sortie de la commande "ping localhost", veuillez l'ajouter à votre question. Également sous Préférences Système & gt; Sécurité & amp; Confidentialité & gt; Pare-feu & gt; Options de pare-feu. Le mode furtif est-il sélectionné?
Steve Chambers
ça marche maintenant, je n'ai absolument rien changé, je peux comprendre
Luce Sky Walker
J'ai redémarré le système et localhost ne fonctionnait plus. mais si je ping localhost. puis ping localhost commence à travailler
Luce Sky Walker
Rien de tout cela n'a de sens. localhost est mappé à la lo0 interface (127.0.0.1) qui est un interface de bouclage . Ça ne peut pas ne pas travail.
Allan
1
@LuceSkyWalker En cas d'échec, essayez de lancer dscacheutil -q host -a name localhost puis ajoutez le résultat (au format de code) à la question. Aussi, quelle est la sortie de LC_ALL=C cat -vet /etc/hosts?
Gordon Davisson

Réponses:

1

Votre fichier / etc / hosts est corrompu. pour une raison quelconque il a unicode LINE SEPARATOR personnages ajouté à plusieurs lignes (le " M-bM-^@M-( "chose dans LC_ALL=C cat -vet de la production), y compris un de ceux pour localhost. Le résolveur de macOS traitera ce caractère étrange comme faisant partie du nom d'hôte, et donc si vous parvenez en quelque sorte à faire un ping localhost<LINE SEPARATOR>, ça va résoudre 127.0.0.1 très bien. Plaine localhost? Pas tellement.

Je ne sais pas comment ces personnages étranges auraient été ajoutés; Avez-vous essayé d’éditer le fichier avec un éditeur sophistiqué qui pensait que ce serait une bonne idée d’utiliser les tout derniers caractères de mise en forme à la mode, plutôt que de s’en tenir à ce qui fonctionnerait? Si c'est le cas, n'utilisez pas cet éditeur pour les fichiers de configuration de style unix (ou les scripts, ou ...). je recommande BBEdit au lieu; même si vous ne l'achetez pas, il vous permettra de faire les choses de base en mode démo gratuit.

Pour ce qui est de la solution ... Eh bien, commencez par faire une copie de sauvegarde au cas où cela irait de travers et gâcherait les choses encore plus qu’elles ne le sont maintenant. Puis lancez la commande:

sudo perl -pi -e 's/[^[:ascii:]]//g' /etc/hosts

Cette devrait purger tous les étranges caractères unicode du fichier. Alors essayez le dscacheutil commander à nouveau; vous devriez obtenir quelque chose comme ça:

$ dscacheutil -q host -a name localhost
name: localhost
ipv6_address: ::1
ipv6_address: fe80:1::1

name: localhost
ip_address: 127.0.0.1

P.s. pour savoir pourquoi quelqu'un pensait que LINE SEPARATOR était une bonne idée, voir le XKCD toujours pertinent et Jeff Atwood fait un discours sur le "Grand schisme de la nouvelle ligne" .

Gordon Davisson
la source
Et c'est pourquoi il y a une belle interface graphique pour cela. Bien repéré.
Thorbjørn Ravn Andersen