2014-09-25 82 views
0

我需要能夠從我的程序中獲取回送接口。我正在編寫一個dns解析器,但我無法直接與etc/hosts進行連接。例如,如果有人拋出「localhost」,我需要解析爲「127.0.0.1」或「:: 1」。如果我也可以檢測到自定義的自定義回送接口,但這不是強制性的,這將是一項獎勵。有沒有辦法可以看到回送地址是「127.0.0.1」還是「:: 1」。以編程方式獲取Loopback接口C/C++

真的具體問題。提前致謝。

回答

1

這裏有兩個不同的問題。

1)名稱「localhost」沒有特別的特別之處。 「localhost」的原因是因爲大多數正確配置的DNS區域都包含一個明確的「localhost」條目。如果查找到非限定主機名,DNS解析器會自動嘗試附加/etc/resolv.conf中「搜索」目錄中給出的域。一個典型的主機的/etc/resolv.conf文件將包含

search example.com 
nameserver 192.168.0.1 
nameserver 192.168.1.1 

其結果是,在「localhost」的DNS查詢將有本地解析器嘗試解決「localhost.example.com」,和example.com的區域文件將具有明確的條目

$ORIGIN example.com 
@   IN  SOA  ns1.example.com. ((the rest of the SOA record 

... 

localhost  A 127.0.0.1 

2)現在,關於本地網絡接口,它取決於您未指定的平臺。它在BSD和Linux上的表現完全不同,我期望在MS-Windows上完成一種完全不同的方式。

假設你指的是Linux的,本地網絡接口列表是由getifaddrs(3)返回 - http://manpages.courier-mta.org/htmlman3/getifaddrs.3.html

flags結構成員,如記錄包含了來自SIOCGIFFLAGS IOCTL標誌,如netdevice記錄(7) - http://manpages.courier-mta.org/htmlman7/netdevice.7.html

如文檔所述,IFF_LOOPBACK標誌標記了回送接口,並且您可以從同一結構中獲取其IP地址。

但是,正如我所指出的那樣,如果您所做的只是編寫解析器,那麼找出回送接口完全不在您的範圍之內。站點管理員在區域文件中指定環回接口的IP地址,您不應該擔心。

+0

該平臺是CentOS。所以,是的,Linux。至於第一點,是的,這是測試的特例。 – kmdent 2014-09-25 01:18:52

相關問題