Monero
Loading...
Searching...
No Matches
local_ip.h
Go to the documentation of this file.
1// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are met:
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above copyright
9// notice, this list of conditions and the following disclaimer in the
10// documentation and/or other materials provided with the distribution.
11// * Neither the name of the Andrey N. Sabelnikov nor the
12// names of its contributors may be used to endorse or promote products
13// derived from this software without specific prior written permission.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
19// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25//
26
27
28#pragma once
29
30#include "int-util.h"
31
32// IP addresses are kept in network byte order
33// Masks below are little endian
34// -> convert from network byte order to host byte order before comparing
35
36namespace epee
37{
38 namespace net_utils
39 {
40 inline
42 {
43 ip = SWAP32LE(ip);
44 /*
45 local ip area
46 10.0.0.0 ... 10.255.255.255
47 172.16.0.0 ... 172.31.255.255
48 192.168.0.0 ... 192.168.255.255
49 */
50 if( (ip | 0xffffff00) == 0xffffff0a)
51 return true;
52
53 if( (ip | 0xffff0000) == 0xffffa8c0)
54 return true;
55
56 if( (ip | 0xffffff00) == 0xffffffac)
57 {
58 uint32_t second_num = (ip >> 8) & 0xff;
59 if(second_num >= 16 && second_num <= 31 )
60 return true;
61 }
62 return false;
63 }
64 inline
66 {
67 ip = SWAP32LE(ip);
68 if( (ip | 0xffffff00) == 0xffffff7f)
69 return true;
70 //MAKE_IP
71 /*
72 loopback ip
73 127.0.0.0 ... 127.255.255.255
74 */
75 return false;
76 }
77
78 }
79}
80
#define SWAP32LE
Definition int-util.h:277
Definition abstract_http_client.h:36
bool is_ip_loopback(uint32_t ip)
Definition local_ip.h:65
bool is_ip_local(uint32_t ip)
Definition local_ip.h:41
TODO: (mj-xmr) This will be reduced in an another PR.
Definition byte_slice.h:40
unsigned int uint32_t
Definition stdint.h:126