为什么我的域名 ping 不通
简单的问题不简单的思路
April 23, 2024
0 words
0 read

环境:任意一台Linux服务器

步骤

1/ 修改Linux中/etc/hosts中的配置文件:

 原始文件:

修改后的文件:

上面两个图打码的是真实IP地址,对本次实验没有影响。

下面修改后的配置文件中新增两行配置:

直接复制过去可以复现本实验。

127.0.0.1   test.localhost127.0.0.1  test.host

2/ 尝试使用 ping 命令去访问配置中的所有域名。

结果是test.host域名会报错:未知的名称或服务

为什么呢?其他任何一个域名都可以ping

思考过程:

3/ 检查了所有拼写是正确的,检查了编码格式,文件格式为utf-8,理论上不会出现特殊字符

4/ 使用 ls -l /etc/hosts  查看了文件权限:

-rw-r--r-- 1 root root 262 3   11 21:12 /etc/hosts ,

权限表明可以正确读取(其实之前的步骤中可以ping通说明权限无异常....)

5/ 使用了 getent hosts test.host 发现什么都没有输出,但是运行getent hosts localhost

输出:(ping localhost正常) 

::1             localhost 

说明在 /etc/hosts 配置的  test.hosts  这个域名无法找到对应的IP地址,但是实际上已经配置了,因为其他都可以正常输出那么就说明 /etc/hosts  文件解析IP是没问题的那么就只有一个可能是 这个域名配置错了,排查到底哪里配置错误了,复制出来所有配置到文本上。

修改编码:最终发现问题。如下图:

6/  这是我的思考过程,原始实验中还有更加精彩的,使用到了strace跟踪系统调用和信号,还有小伙伴使用了cat -v 来查看文件的编码。我只想到了 getent hosts localhost 这个命令,因为上面说的俩命令我不会使😅。

解释一下getent 命令,getent 是一个用于获取系统数据库数据的命令,getent hosts localhost 命令的含义是获取系统中关于主机名 localhost 的信息。getent hosts localhost  会直接查询  /etc/hosts  文件,如果找到了对应的 IP 就会输出,如果没有会输出空或者错误。

以上就是这个实验的所有内容,希望你有时间可以复现一下。


More Articles
See All