adding methods to detect multicast and public ip ranges
This commit is contained in:
parent
1201d1c1f6
commit
4736e8e666
2 changed files with 61 additions and 0 deletions
|
|
@ -17,6 +17,24 @@ namespace fc {
|
|||
|
||||
friend bool operator==( const address& a, const address& b );
|
||||
friend bool operator!=( const address& a, const address& b );
|
||||
|
||||
/**
|
||||
* @return true if the ip is in the following ranges:
|
||||
*
|
||||
* 10.0.0.0 to 10.255.255.255
|
||||
* 172.16.0.0 to 172.31.255.255
|
||||
* 192.168.0.0 to 192.168.255.255
|
||||
* 169.254.0.0 to 169.254.255.255
|
||||
*
|
||||
*/
|
||||
bool is_private_address()const;
|
||||
/**
|
||||
* 224.0.0.0 to 239.255.255.255
|
||||
*/
|
||||
bool is_multicast_address()const;
|
||||
|
||||
/** !private & !multicast */
|
||||
bool is_public_address()const;
|
||||
private:
|
||||
uint32_t _ip;
|
||||
};
|
||||
|
|
@ -50,6 +68,7 @@ namespace fc {
|
|||
uint32_t _port;
|
||||
address _ip;
|
||||
};
|
||||
|
||||
}
|
||||
class variant;
|
||||
void to_variant( const ip::endpoint& var, variant& vo );
|
||||
|
|
|
|||
|
|
@ -69,6 +69,48 @@ namespace fc { namespace ip {
|
|||
return string(_ip) + ':' + fc::string(boost::lexical_cast<std::string>(_port).c_str());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the ip is in the following ranges:
|
||||
*
|
||||
* 10.0.0.0 to 10.255.255.255
|
||||
* 172.16.0.0 to 172.31.255.255
|
||||
* 192.168.0.0 to 192.168.255.255
|
||||
* 169.254.0.0 to 169.254.255.255
|
||||
*
|
||||
*/
|
||||
bool address::is_private_address()const
|
||||
{
|
||||
static address min10_ip("10.0.0.0");
|
||||
static address max10_ip("10.255.255.255");
|
||||
static address min172_ip("172.16.0.0");
|
||||
static address max172_ip("172.31.255.255");
|
||||
static address min192_ip("192.168.0.0");
|
||||
static address max192_ip("192.168.255.255");
|
||||
static address min169_ip("169.254.0.0");
|
||||
static address max169_ip("169.254.255.255");
|
||||
if( _ip >= min10_ip._ip && _ip <= max10_ip._ip ) return true;
|
||||
if( _ip >= min172_ip._ip && _ip <= max172_ip._ip ) return true;
|
||||
if( _ip >= min192_ip._ip && _ip <= max192_ip._ip ) return true;
|
||||
if( _ip >= min169_ip._ip && _ip <= max169_ip._ip ) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 224.0.0.0 to 239.255.255.255
|
||||
*/
|
||||
bool address::is_multicast_address()const
|
||||
{
|
||||
static address min_ip("224.0.0.0");
|
||||
static address max_ip("239.255.255.255");
|
||||
return _ip >= min_ip._ip && _ip <= max_ip._ip;
|
||||
}
|
||||
|
||||
/** !private & !multicast */
|
||||
bool address::is_public_address()const
|
||||
{
|
||||
return !( is_private_address() || is_multicast_address() );
|
||||
}
|
||||
|
||||
} // namespace ip
|
||||
|
||||
void to_variant( const ip::endpoint& var, variant& vo )
|
||||
|
|
|
|||
Loading…
Reference in a new issue