2016-12-20 3 views
1

accept()の後にs_addrとs6_addrがどのように整理されるのか混乱しています。私はinet_ntop()を敢えて結果の文字列で処理しますか?プライベートアドレスの範囲をお探しプライベートアドレスのsockaddrを照会するPOSIXの方法

... 10 * 172 ... 192.168。* エクストラクレジット127 *

のための正直なところ、私は、FC00のためのユースケースを持っていない::/7、しかし誰かが可能性があります。ここで

は私の源である...多くの仕事と実験後 https://github.com/cheako/ihlt/blob/master/src/server.c#L186

+0

実際には、「127.0.0.0/8」はプライベートアドレス範囲ではありません。 IPv4の場合、RFC 1918で定義されているように、3つのプライベートアドレス範囲があります: '10.0.0.0/8'、 '172.16.0.0.0/12'(すべての' 172.0.0.0/8'アドレスがこのあなたが暗示しているように)、 '192.168.0.0/16'。パブリックインターネット上でルーティングすることができない他の多くの範囲がありますが、それらは単にプライベートアドレスではありません。 [IANA IPv4 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml)を参照してください。 –

+0

それはまさにその例があるべき理由です...どこかに。 –

答えて

0

は、私は次のことを考案したのだが、動作するように見えました。

bool IsPrivate(in_addr_t t) { 
    bool ret = false; 
    in_addr_t a = t & (in_addr_t) 0xff; 
    if(a == (in_addr_t) 0x7f) ret = true; 
    if(a == (in_addr_t) 0x0a) ret = true; 
    in_addr_t b = t & (in_addr_t) 0xe0ff; 
    if(b == (in_addr_t) 0xac) ret = true; 
    in_addr_t c = t & (in_addr_t) 0xffff; 
    if(c == (in_addr_t) 0xa8c0) ret = true; 
    return ret; 
} 
関連する問題