美文网首页
弄清楚 HostName、LocalHostName、Compu

弄清楚 HostName、LocalHostName、Compu

作者: 越前君 | 来源:发表于2022-08-15 21:53 被阅读0次
    配图源自 Freepik

    一、简介

    • ComputerName - 电脑名称。
    • LocalHostName - 本地主机名。
    • HostName - 主机名。

    可通过以下命令查看:

    $ hostname
    host-0-1.can.xxx.network
    
    $ scutil --get HostName
    HostName: not set
    
    $ scutil --get LocalHostName
    Frankies-MacBook-Pro
    
    $ scutil --get ComputerName
    Frankie's MacBook Pro
    

    在 macOS 上可在「系统偏好设置 - 共享」中查看:

    细心的同学会发现,关于 HostName 命令行输出与界面上显示的不一样,具体原因下面会介绍。

    二、scutil 使用

    以 macOS 为例,HostNameLocalHostNameComputerName 是可以在系统配置文件 /Library/Preferences/SystemConfiguration/preferences.plist 看到的。其中 *.plist 表示属性列表文件,通常用来存储用户设置。

    这里我截取了一部分配置,如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CurrentSet</key>
        <string>/Sets/1B16C032-311E-4EE7-A79F-7058C7340EE8</string>
        <key>Model</key>
        <string>MacBookPro13,2</string>
        <key>System</key>
        <dict>
            <key>Network</key>
            <dict>
                <key>HostNames</key>
                <dict>
                    <key>LocalHostName</key>
                    <string>Frankies-MacBook-Pro</string>
                </dict>
            </dict>
            <key>System</key>
            <dict>
                <key>ComputerName</key>
                <string>Frankie's MacBook Pro</string>
                <key>ComputerNameEncoding</key>
                <integer>25</integer>
                <!-- <key>HostName</key>
                <string>如有设置的话,HostName 将会在此展示</string> -->
            </dict>
        </dict>
        <key>__VERSION__</key>
        <integer>20191120</integer>
    </dict>
    </plist>
    

    再回头看通过 scutil 命令输出结果就很容易理解了,它读取的就是此文件的内容罢了。

    $ scutil --get HostName
    HostName: not set
    
    $ scutil --get LocalHostName
    Frankies-MacBook-Pro
    
    $ scutil --get ComputerName
    Frankie's MacBook Pro
    

    其中 scutil --get HostName 输出 HostName: not set 就是因为未曾设置过 HostName

    scutil 的用法

    scutil 命令是管理系统配置的工具。

    查看、设置配置:

    $ scutil --get <pref>
    $ scutil --set <pref> <newval>
    

    其中 pref(preference)目前仅支持 ComputerNameLocalHostNameHostName

    查看 DNS 配置信息:

    $ scutil --dns
    

    查看代理信息:

    $ scutil --proxy
    

    查看网络信息(IPv4/IPv6):

    $ scutil --nwi
    

    更详细用法可通过 man scutilscutil -h 查看。

    三、读取 hostname

    前面,执行 hostname 命令输出结果如下:

    $ hostname
    host-0-1.can.xxx.network
    

    它看似乎起来与 LocalHostNameHostName 无关?

    其实不然,它跟读取顺序有关。以 macOS 为例,其读取顺序如下:

    • /etc/hosts 文件读取(在 OS X Yosemite 之前为 /etc/hostconfig 文件)。
    • 从系统配置 /Library/Preferences/SystemConfiguration/preferences.plist 读取 System ▸ System ▸ HostName
    • 根据本机 IP 地址的反向 DNS 查询获取。
    • 从系统配置 /Library/Preferences/SystemConfiguration/preferences.plist 读取 System ▸ Network ▸ HostNames ▸ LocalHostName
    • 若以上都无法获取到,则默认为 localhost

    然后我这里的话,是在第三个步骤里得到的。根据反向 DNS 协议,可使用 IP 地址查询到对应的 HostName,这里利用到 nslookup 命令。

    假设我的本地 IP 地址为 172.16.0.1(乱写的),反向 DNS 查询结果类似如下:

    $ nslookup 172.16.0.1
    Server:     172.24.0.2
    Address:    172.24.0.2#53
    
    0.1.16.172.in-addr.arpa name = host-0-1.can.xxx.network.
    
    

    四、hostname 是什么?

    未完待续...

    相关文章

      网友评论

          本文标题:弄清楚 HostName、LocalHostName、Compu

          本文链接:https://www.haomeiwen.com/subject/evikgrtx.html