how to determine whether an IP address in private?

后端 未结 5 1909
不知归路
不知归路 2020-12-09 02:30

So far I have this code:

NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface adapter in adapters)
{
  IPInte         


        
5条回答
  •  北海茫月
    2020-12-09 03:33

    Added IPv6 and localhost cases.

        /* An IP should be considered as internal when:
    
           ::1          -   IPv6  loopback
           10.0.0.0     -   10.255.255.255  (10/8 prefix)
           127.0.0.0    -   127.255.255.255  (127/8 prefix)
           172.16.0.0   -   172.31.255.255  (172.16/12 prefix)
           192.168.0.0  -   192.168.255.255 (192.168/16 prefix)
         */
        public bool IsInternal(string testIp)
        {
            if(testIp == "::1") return true;
    
            byte[] ip = IPAddress.Parse(testIp).GetAddressBytes();
            switch (ip[0])
            {
                case 10:
                case 127:
                    return true;
                case 172:
                    return ip[1] >= 16 && ip[1] < 32;
                case 192:
                    return ip[1] == 168;
                default:
                    return false;
            }
        }
    

提交回复
热议问题