2012-12-11 38 views
0

Php curl使用getaddrinfo()將主機名解析爲IP地址。通過設置一個選項可以很容易地查找IPV4地址,但這需要做相當多的工作,並且在我們的網絡上正常運行IPv6時很難撤銷。是否可以設置getaddrinfo()默認只檢索IPV4地址?

是否有任何方法可以將getaddrinfo()設置爲默認用於整個Ubuntu服務器的IPv4查找?

感謝 韋恩

+0

你對C或php的解決方案感興趣嗎? – askmish

+0

都不是。我想設置一個默認設置,就像在sys或dev中那樣默認IPv4的查找。 – Wayne

+0

似乎沒有這樣的設置。一些信息在這裏:http://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups雖然。 – nos

回答

3

該解決方案是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啓動並運行時,更改該函數的內部「默認」。

+0

謝謝,我正在尋找全球解決方案。像一個默認設置。 – Wayne

+2

只需爲getaddrinfo創建一個提供「默認值」的包裝函數。然後在整個應用程序中使用包裝函數。當ipv6啓動並運行時,更改該功能的內部「默認」。 – goji

1

在Linux上,getaddrinfo()的行爲可以使用/etc/gai.conf進行調整。您不能使用此文件來阻止返回IPv6地址,但您可以使用它來優先考慮IPv6地址上的IPv4地址。

真的,只是希望PHP/Curl將AI_ADDRCONFIG標誌傳遞給getaddrinfo(),這將導致它僅在機器當前配置了IPv6地址時才返回IPv6地址。

相關問題