1

次の2つの列があります。

SELECT b.ip_address AS IP、b.mask AS MASK FROM interfaces b WHERE b.ip_address = 167804290;
+ ----------- + ------------ +
| IP | マスク|
+ ----------- + ------------ +
| 167804290 | 4294967168 |
+ ----------- + ------------ +
実際のIPアドレスとそのサブネットマスクはどこにありますか
SELECT INET_NTOA(b.ip_address)AS IP、INET_NTOA(b.mask)AS MASK FROM interfaces b WHERE b.ip_address = 167804290;
+ -------------- + ----------------- + | IP | マスク| + -------------- + ----------------- + | 10.0.125.130 | 255.255.255.128 | + -------------- + ----------------- + セットの1行(0.00秒)
10.0.125.255mysqlを使用して実際のブロードキャスト範囲(この場合はまたは) を取得する方法を見つけようとしています167804415が、見つけることができません。私が得た最も近い

SELECT INET_NTOA(b.ip_address +(POWER(2,32)-b.mask-1))FROM interfaces b WHERE b.ip_address = 167804290;
+ ------------------------------------------------- --+
| INET_NTOA(b.ip_address +(POWER(2,32)-b.mask-1))|
+ ------------------------------------------------- --+
| 10.0.126.1 |
+ ------------------------------------------------- --+

ip_addressそれに関する唯一の問題は、これが列がサブネットの開始であると想定していることです10.0.125.128

どんな助けでもありがたいです。

4

1 に答える 1

3

ブロードキャスト アドレスは、サブネット マスクの補数であり、IP アドレスと OR されます。

SELECT INET_NTOA( ~b.mask & 0xffffffff | b.ip_address) 
FROM interfaces b 
WHERE b.ip_address = 167804290; 

& 0xffffffff( MySQL では、ビットごとの補数演算子が 64 ビット値を返すため、" " でマスクする必要があります。)

于 2009-02-03T21:52:00.133 に答える