Php curl使用getaddrinfo()將主機名解析爲IP地址。通過設置一個選項可以很容易地查找IPV4地址,但這需要做相當多的工作,並且在我們的網絡上正常運行IPv6時很難撤銷。是否可以設置getaddrinfo()默認只檢索IPV4地址?
是否有任何方法可以將getaddrinfo()設置爲默認用於整個Ubuntu服務器的IPv4查找?
感謝 韋恩
Php curl使用getaddrinfo()將主機名解析爲IP地址。通過設置一個選項可以很容易地查找IPV4地址,但這需要做相當多的工作,並且在我們的網絡上正常運行IPv6時很難撤銷。是否可以設置getaddrinfo()默認只檢索IPV4地址?
是否有任何方法可以將getaddrinfo()設置爲默認用於整個Ubuntu服務器的IPv4查找?
感謝 韋恩
該解決方案是C,不知道PHP。當調用getaddrinfo時,你傳遞一個struct addrinfo來提供你想要查找的「提示」。下面
struct addrinfo *res;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_INET;
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("localhost", "80", &hints, &res);
從我的評論下面複製,因爲它似乎適用於回答樣本:
剛剛創建的getaddrinfo提供您的 「默認」的包裝功能。然後在整個應用程序中使用包裝函數。 當ipv6啓動並運行時,更改該函數的內部「默認」。
在Linux上,getaddrinfo()
的行爲可以使用/etc/gai.conf
進行調整。您不能使用此文件來阻止返回IPv6地址,但您可以使用它來優先考慮IPv6地址上的IPv4地址。
真的,只是希望PHP/Curl將AI_ADDRCONFIG
標誌傳遞給getaddrinfo()
,這將導致它僅在機器當前配置了IPv6地址時才返回IPv6地址。
你對C或php的解決方案感興趣嗎? – askmish
都不是。我想設置一個默認設置,就像在sys或dev中那樣默認IPv4的查找。 – Wayne
似乎沒有這樣的設置。一些信息在這裏:http://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups雖然。 – nos