-1
我試圖寫一個函數來檢查我的IP是子網掩碼內,如下圖所示: -inet_addr()返回長IP以相反的順序
bool isIPinSubnet(CString ip, CString network, int keepbits)
{
ULONG ip_addr = 0;
ULONG network_addr = 0;
UINT32 mask_addr = ~(~(UINT32)(0) >> keepbits);
ip_addr = inet_addr(ip);
network_addr = inet_addr(network);
ULONG net_lower = (network_addr & mask_addr);
ULONG net_upper = (net_lower | (~mask_addr));
if (ip_addr >= net_lower && ip_addr <= net_upper) {
return true;
}
return false;
}
問題是其不能正常工作。在調試時,我看到inet_addr()函數以相反的順序返回IP的長度。 例如,如果我這樣做,isIPinSubnet("192.168.0.15","192.168.0.1",24);
長inet_addr回報IP: 192.168.0.15
是251701440
和IP: 192.168.0.1
是16820416
。
檢查這裏http://www.smartconversion.com/unit_conversion/IP_Address_Converter.aspx
251701440
對應IP: 15.0.168.192
,並
16820416
對應IP: 1.0.168.192
這顯然是我們傳遞給inet_addr相反。
爲什麼這樣表現?如何解決它?
網絡字節順序抗宿主字節順序...從[MSDN的'inet_addr'參考](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738563(V = vs.85).aspx):「所有Internet地址都以IP的網絡順序返回」 –
請參閱htonl或其朋友ntohl。 –