2016-08-13 8 views
2

LAN経由で検索するための簡単なプログラムを書いていますが、プログラムは検索方法(単一のIPアドレスをチェックし、ホスト名をチェックしたり、ローカルマシンのサブネットをチェック...など)をいくつか持っています。サブネットマスクから検索するIPアドレスを知るには?

「ローカルマシンのサブネットを確認してください」(atleast私はそれが問題になるかもしれないと思います)!

ここに問題があるかもしれないので、私はC++でそれを処理する方法があるかどうかを知りたいと思います。

getadapteraddresses()を使用してローカルマシンのサブネットを検索できるようにIPアドレスとサブネットマスクを取得すると、getadapteraddresses()サブネットの戻り値255.255.254.0とIP-192.160.5.10の場合は疑問があります。最初のステップは192.168.5.0-255を検索することですが、次にどのような範囲で192.168.6.0-255または192.168.4.0-255を検索する必要がありますか?

これをC++で判断する方法がある場合は、ヒントがあれば大丈夫です。

ありがとうございました:)

+0

ルータがあなたのために何をしているのですか? –

+0

@πάνταῥεῖ私の目標はプログラムを起動し、ローカルマシンのサブネットで検索を選ぶことができ、プログラムは生きているすべてのIPアドレスを与えます(MACアドレス、ホスト名など)。 – Genato

+1

サブネットマスクとIPアドレスそしてそれら。この結果とのORは、マスク内のビットのすべての組み合わせがゼロであることを示します。これらはすべて現在のサブネット内のアドレスです。 –

答えて

1

をあなたが私はあなたが間違った値を得たと思う

int count = (~netmask) & 0x7FFFFFFF; 
int network = ip_address & netmask; 
for (int i=1; i<count; i++) { 
    int addr = network + i; 
    ... 
} 
+0

ネットマスクはサブネットですか? yesの場合、 '(〜netmask)&0x7FFFFFFF'を実行するとき、ネットマスクは明示的に16進数でなければなりませんか? 'ip_address&netmask'を実行するとき、どの形式でip_addressを使うべきですか? – Genato

+1

@Genato:私は、アドレスが「」の場合、ネットマスクとip_addressの両方が32ビットの符号なし数値 '(b1 << 24)|(b2 << 16)|(b3 << 8)| b4」と仮定していました。 ' – 6502

0

男のようなもので、すべてのアドレスを計算することができます。 192.168.5.xは255.255.254.0の範囲内にありません。このサブネットマスクにより、192.168.0.0〜192.168.1.255のアドレスが許可されます。 5がホスト部分である場合、マスクは255.255.248.0でなければなりません。

+0

私はそのような価値を得ることはできませんでした。あなたはこれをどう説明しますか、私のサブネットは255.255.255.0で、IPアドレスは192.168.5.20ですか? – Genato

+0

完全に有効です。サブネットの範囲は192.168.5.0 - > 192.168.5.255です。 192.168.5.0と192.168.5.255はサブネットにありますが、有効なアドレスではありません。最初はネットワークアドレス、2番目はブロードキャストアドレスです。 –

+0

@RichardCritten私はそれを知っていて道を譲ることはできません、私の質問は何か他のものでしたか? – Genato

関連する問題