Dns

將 IP 與主機名關聯,無需編輯 /etc/hosts

  • August 26, 2022

我知道我可以將主機名與我的 IP 地址相關聯/etc/hosts

1.2.3.4   foo

然後,例如在tcpdump輸出中,我將看到foo而不是我的 IP 地址(如果-n未使用)

無論如何,我可以在命令行上臨時添加這樣IP -> hostname的映射,而不實際編輯文件嗎?

假設我連接到 wifi,並獲得一些隨機 IP。我希望在目前會話的 tcpdump 中將此 IP 解析為我的主機名(無需將條目永久添加到/etc/hosts.

更新:

如果我的問題和標題不清楚,我正在尋找一種解決方案,如何在不修改/etc/hosts.

就像我可以使用命令hostname設置目前會話的主機名(即直到下次重新啟動)而無需編輯一樣/etc/hostname,我正在尋找為目前會話設置反向查找(即直到下次重新啟動)而無需修改/etc/hosts

C 庫的主機名解析服務(幾乎所有需要主機名解析的軟體都使用它)主要由文件hosts:中的行控制/etc/nsswitch.conf。該行上的每個關鍵字都會導致載入相應的libnss_*.so庫,這些庫最終將處理來自應用程序的主機名解析請求。

如果您的發行版包含一個名為的包nss-myhostname(或任何其他將提供libnss_myhostname.so.*庫的包),那麼您可以安裝該包,添加myhostnamehosts:nsswitch.conf,然後該庫將自動將本地配置的系統主機名與任何和所有 IP 地址相關聯配置為系統上的網路介面。使用此配置,您無需執行任何命令來更新關聯:這一切都會自動發生。如果您的系統上根本沒有配置 IP 地址,它還將您的本地主機名與 IP 地址 127.0.0.2(和 IPv6 地址 ::1)相關聯。

如果hosts:您的行nsswitch.conf包含關鍵字resolve或您/etc/resolv.conf有一行nameserver 127.0.0.53,那麼您正在使用systemd-resolved您的 DNS 解析器。它可以為您的本地主機名與任何本地配置的 IP 地址提供類似的自動關聯libnss_myhostname(見上文)。如果您遇到這種情況,請參閱man systemd-resolved並閱讀標題為 的章節SYNTHETIC RECORDS。它還將包括可選的 mDNS(見下文)和 LLMNR(連結本地多播名稱解析器/響應器)功能,它們還可能以迂迴的方式提供本地主機名解析。

如果hosts:您的行nsswitch.conf包含可以使用多播 DNS (mDNS) 的主機名解析服務,mdns4_minimal 並且您的系統包含 mDNS 響應程序(例如avahi-daemon),它可能會自動解析<hostname>.local到本地系統的 IP 地址,反之亦然。

如果hosts:您的行nsswitch.conf包含任何其他選項(或您的發行版提供其他libnss_*.so庫),您將不得不自己調查它們提供的功能,因為您沒有指定您的發行版。

如果hosts:您的行nsswitch.conf僅包含經典filesdns關鍵字,或者您需要為目前未配置到任何本地網路介面的 IP 地址分配名稱(例如,其他主機的 IP 地址名稱),請參閱Marcus中的方法穆勒的回答

如果這些答案都不適合你,那麼恐怕答案會是“不,沒有你想要的功能。但如果你有程式技能,沒有什麼能阻止你自己實現它” - 以上和 Marcus Müller 的回答中的可能方法列表應該為您提供有關可用於將自己的解決方案插入其中的介面的想法。

引用自:https://unix.stackexchange.com/questions/714953