2017-11-09 13 views
0

アドレスが10.0.0.0 - 10.255.255.255の範囲にあるかどうかを知りたい。ipv4アドレスの比較 - sockaddr_in

int localAddress = 0; 
struct sockaddr_in localOneFirst; 
struct sockaddr_in localOneLast; 

inet_pton(AF_INET, "11.0.0.0", &(address.sin_addr)); 
inet_pton(AF_INET, "10.0.0.0", &(localOneFirst.sin_addr)); 
inet_pton(AF_INET, "10.255.255.255", &(localOneLast.sin_addr)); 

if((address.sin_addr.s_addr >= localOneFirst.sin_addr.s_addr) && (address.sin_addr.s_addr <= localOneLast.sin_addr.s_addr)) { 
    localAddress = 1; 
} 

私のアドレス11.0.0.0は10.255.255.255より大きいが、このプログラムはそうではないことを示しています。

"address.sin_addr.s_addr"の値が11で、 "localOneFirst.sin_addr.s_addr"の値が大きいためです。

したがって、一部のアドレスがこの範囲にあるかどうかを認識できますか?

+1

可能な重複[Cでソケットアドレスを比較するには?](https://stackoverflow.com/questions/15461350/how-to-compare-socket -address-in-c) – v1bri

+0

いいえ、それは違う –

+0

問題が何であるか分かりません。 32ビット整数の最初のオクテットを比較するか、既に点線の表現をしているので、最初のドットの前の数字を比較してください。 – SergeyA

答えて

0

sockaddr_inアドレスはネットワークバイトオーダー(ビッグエンディアン)で格納されます。ビッグエンディアンシステムでコードが実行されている場合、値は正しく比較されません。

使用ntohl()値を比較:

bool localAddress = (
    (ntohl(address.sin_addr.s_addr) >= ntohl(localOneFirst.sin_addr.s_addr)) && 
    (ntohl(address.sin_addr.s_addr) <= ntohl(localOneLast.sin_addr.s_addr)) 
); 
関連する問題