Re: [PHP] 0.0.0.0 iplong()
On 06/04/2012 12:48 PM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 8:38 PM, jasjason.ger...@gmail.com wrote: On 06/04/2012 11:33 AM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 6:54 PM, jasjason.ger...@gmail.comwrote: Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) The error is probably not where you suspect it to be. ip2long will return false for ip2long($mask), because $mask is not a valid IP address. The ~ operator is not supported for false. - Matijn Strange... this works $ip = '10.0.2.0'; $mask = '24'; Anything using 0.0.0.0 fails using the bitmask to calculate valid CIDR ranges. Yes, because with $ip being 0.0.0.0, the result of ip2long($ip) will be zero. Zero evaluates to false when PHP is going to parse the || operator, and because of that, it continues to parse the rest. When the result of ip2long($ip) is greater that zero, in case of some other valid IP, it will evaluate to true and PHP will not even execute the rest after the || because the result will be true anyway. Did you mean to use a single | operator, as a bitwise OR? - Matijn With any ACL rule using iptables, hosts.allow/hosts.deny, routers where 0.0.0.0/24 is specified (all of the internet ipv4 addresses) this is a valid range using CIDR notation. It seems like a bug to me -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
On Tue, Jun 5, 2012 at 1:07 PM, jas jason.ger...@gmail.com wrote: On 06/04/2012 12:48 PM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 8:38 PM, jasjason.ger...@gmail.com wrote: On 06/04/2012 11:33 AM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 6:54 PM, jasjason.ger...@gmail.com wrote: Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) The error is probably not where you suspect it to be. ip2long will return false for ip2long($mask), because $mask is not a valid IP address. The ~ operator is not supported for false. - Matijn Strange... this works $ip = '10.0.2.0'; $mask = '24'; Anything using 0.0.0.0 fails using the bitmask to calculate valid CIDR ranges. Yes, because with $ip being 0.0.0.0, the result of ip2long($ip) will be zero. Zero evaluates to false when PHP is going to parse the || operator, and because of that, it continues to parse the rest. When the result of ip2long($ip) is greater that zero, in case of some other valid IP, it will evaluate to true and PHP will not even execute the rest after the || because the result will be true anyway. Did you mean to use a single | operator, as a bitwise OR? - Matijn With any ACL rule using iptables, hosts.allow/hosts.deny, routers where 0.0.0.0/24 is specified (all of the internet ipv4 addresses) this is a valid range using CIDR notation. It seems like a bug to me Nope, there's no bug here. Can you explain what you're trying to do with ip2long($mask)? - Matijn -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
On 06/05/2012 05:40 AM, Matijn Woudt wrote: On Tue, Jun 5, 2012 at 1:07 PM, jasjason.ger...@gmail.com wrote: On 06/04/2012 12:48 PM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 8:38 PM, jasjason.ger...@gmail.comwrote: On 06/04/2012 11:33 AM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 6:54 PM, jasjason.ger...@gmail.com wrote: Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) The error is probably not where you suspect it to be. ip2long will return false for ip2long($mask), because $mask is not a valid IP address. The ~ operator is not supported for false. - Matijn Strange... this works $ip = '10.0.2.0'; $mask = '24'; Anything using 0.0.0.0 fails using the bitmask to calculate valid CIDR ranges. Yes, because with $ip being 0.0.0.0, the result of ip2long($ip) will be zero. Zero evaluates to false when PHP is going to parse the || operator, and because of that, it continues to parse the rest. When the result of ip2long($ip) is greater that zero, in case of some other valid IP, it will evaluate to true and PHP will not even execute the rest after the || because the result will be true anyway. Did you mean to use a single | operator, as a bitwise OR? - Matijn With any ACL rule using iptables, hosts.allow/hosts.deny, routers where 0.0.0.0/24 is specified (all of the internet ipv4 addresses) this is a valid range using CIDR notation. It seems like a bug to me Nope, there's no bug here. Can you explain what you're trying to do with ip2long($mask)? - Matijn As stated previously using CIDR notation such as 192.168.0.0/24, 10.0.0.0/24 perform validation on an IP existing within said subnet range. visiting ip: 192.168.0.22 acl allow range: 192.168.0.0/24 acl deny range: 0.0.0.0/24 CIDR notation allows me to utilize shorthand notation for specifying a range of IP's In those two cases any ip within 192.168.0.0 - 192.168.0.255 is allowed while anything else residing between 0.0.0.0 - 255.255.255.255 is denied The problem is I can perform operations on CIDR ranges such as the following: 192.168.0.0/24 192.168.1.0/16 10.0.0.0/24 But cannot use the traditional 0.0.0.0/24 because iplong() evaluates 0.0.0.0 as false thereby invalidating a valid CIDR notation when evaluated as (ip2long($ip) || (~ip2long($mask))) + 1; From my own tests only 0.0.0.0/24 fails or as shown in the example code above (ip2long(0.0.0.0) || (~ip2long(24))) + 1; The class I am using to test with can be found at http://www.php.net/manual/en/function.ip2long.php#108812 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
acl allow range: 192.168.0.0/24 acl deny range: 0.0.0.0/24 CIDR notation allows me to utilize shorthand notation for specifying a range of IP's In those two cases any ip within 192.168.0.0 - 192.168.0.255 is allowed while anything else residing between 0.0.0.0 - 255.255.255.255 is denied Na-uh. You want 0.0.0.0/0, which is valid. 0.0.0.0/24 isn't valid. -- Regards, Chris Knipe -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
On Tue, Jun 5, 2012 at 1:49 PM, jas jason.ger...@gmail.com wrote: snip As stated previously using CIDR notation such as 192.168.0.0/24, 10.0.0.0/24 perform validation on an IP existing within said subnet range. visiting ip: 192.168.0.22 acl allow range: 192.168.0.0/24 acl deny range: 0.0.0.0/24 CIDR notation allows me to utilize shorthand notation for specifying a range of IP's In those two cases any ip within 192.168.0.0 - 192.168.0.255 is allowed while anything else residing between 0.0.0.0 - 255.255.255.255 is denied The problem is I can perform operations on CIDR ranges such as the following: 192.168.0.0/24 192.168.1.0/16 10.0.0.0/24 But cannot use the traditional 0.0.0.0/24 because iplong() evaluates 0.0.0.0 as false thereby invalidating a valid CIDR notation when evaluated as (ip2long($ip) || (~ip2long($mask))) + 1; From my own tests only 0.0.0.0/24 fails or as shown in the example code above (ip2long(0.0.0.0) || (~ip2long(24))) + 1; The class I am using to test with can be found at http://www.php.net/manual/en/function.ip2long.php#108812 First of all, as I suggested earlier, the class uses the single |, which means bitwise OR, you're using ||, boolean OR. Second, the class you're referring to is wrong. Using ip2long on 24 is just not valid, you probably want to call ip2long('255.255.255.0') instead, though it is probably easier to convert the 24 to the long value. - Matijn -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] 0.0.0.0 iplong()
Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
On Mon, Jun 4, 2012 at 6:54 PM, jas jason.ger...@gmail.com wrote: Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) The error is probably not where you suspect it to be. ip2long will return false for ip2long($mask), because $mask is not a valid IP address. The ~ operator is not supported for false. - Matijn -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
On 06/04/2012 11:33 AM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 6:54 PM, jasjason.ger...@gmail.com wrote: Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) The error is probably not where you suspect it to be. ip2long will return false for ip2long($mask), because $mask is not a valid IP address. The ~ operator is not supported for false. - Matijn Strange... this works $ip = '10.0.2.0'; $mask = '24'; Anything using 0.0.0.0 fails using the bitmask to calculate valid CIDR ranges. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] 0.0.0.0 iplong()
On Mon, Jun 4, 2012 at 8:38 PM, jas jason.ger...@gmail.com wrote: On 06/04/2012 11:33 AM, Matijn Woudt wrote: On Mon, Jun 4, 2012 at 6:54 PM, jasjason.ger...@gmail.com wrote: Not sure if this is a bug or not... I have run into an error when performing a conditional using iplong() and the ~ bitwise operator $ip = '0.0.0.0'; $mask = '24'; $end = (ip2long($ip) || (~ip2long($mask))) + 1; PHP Fatal error: Unsupported operand types I even tried to typecast the mask to (int) The error is probably not where you suspect it to be. ip2long will return false for ip2long($mask), because $mask is not a valid IP address. The ~ operator is not supported for false. - Matijn Strange... this works $ip = '10.0.2.0'; $mask = '24'; Anything using 0.0.0.0 fails using the bitmask to calculate valid CIDR ranges. Yes, because with $ip being 0.0.0.0, the result of ip2long($ip) will be zero. Zero evaluates to false when PHP is going to parse the || operator, and because of that, it continues to parse the rest. When the result of ip2long($ip) is greater that zero, in case of some other valid IP, it will evaluate to true and PHP will not even execute the rest after the || because the result will be true anyway. Did you mean to use a single | operator, as a bitwise OR? - Matijn -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php