1
knightdf 2020-08-28 15:01:26 +08:00 1
又不是进程 A 去打开 hosts 文件找 IP
|
2
asilin 2020-08-28 15:06:20 +08:00
"而去通过 DNS 去找 www.baidu.com 对应的 IP",在 Linux 中,TCP 套接字也是文件句柄,也包含在你所说的`65535`中
|
4
dongrenwen 2020-08-28 17:52:27 +08:00
可以考虑做个实验
|
5
yangbonis 2020-08-28 20:17:14 +08:00 via iPhone
一般 c 语言 libc 搞的,查下 libc 的 resolver 。
|
6
yangbonis 2020-08-28 20:21:14 +08:00 via iPhone
另外对于内核里依赖域名的一些功能,内核有一个自己的 resolver
|
7
ChristopherWu 2020-08-29 11:53:16 +08:00
说不定都开了 https://linux.die.net/man/8/nscd nscd 就没这个问题。
|
8
ChristopherWu 2020-08-29 12:05:48 +08:00
刚特意试了一下,别说打开`/etc/hosts`了,你连程序都没法打开:
``` ubuntu@VM-0-7-ubuntu:~$ sudo strace -f -e open -y -yy ping test 2>&1 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3</etc/ld.so.cache> open("/lib/x86_64-linux-gnu/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3</lib/x86_64-linux-gnu/libcap.so.2.24> open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3</lib/x86_64-linux-gnu/libc-2.23.so> open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 4</run/resolvconf/resolv.conf> open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 4</run/resolvconf/resolv.conf> open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 4</etc/nsswitch.conf> open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4</etc/ld.so.cache> open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 4</lib/x86_64-linux-gnu/libnss_files-2.23.so> open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4</etc/host.conf> open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4</etc/hosts> ``` |
9
zhoudaiyu OP @ChristopherWu 是程序已经打开这么多文件了,然后再想打开 /etc/hosts 才打不开吧
|
10
ungrown 2020-09-10 14:31:55 +08:00
以前有段时间家宽获取的百度网盘 DNS 记录连接不畅,手动改了 hosts 之后,baidupsc-go 依然通过 DNS 查询到的记录连接,这事当时费了好大功夫,最后发现 Golang 跟 DNS 相关的库(不知是默认还是怎么着)会直接忽略本地 hosts 。
所以本地 hosts 虽然是系统层面的配置,也确实被多数软件接受,但依然存在某些程序和库直接无视 hosts 的情况。 |