2016-08-13 93 views
2

我正在编写通过局域网搜索的简单程序,程序有很少的选项如何搜索(检查单个IP地址,检查主机名,检查本地机器子网....等)。如何知道从子网掩码搜索哪些IP地址?

我被困在“检查本地机器子网”(至少我认为这可能是一个问题)!?

好吧,这是什么可能是一个问题,所以我想知道是否有一种方法来处理在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和还有他们;然后,或者用这个结果掩码中所有位的组合为零。这些是当前子网中的所有地址。 –

回答

1

你可以计算的所有地址的东西,如

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

网络掩码是子网?如果是,当执行'(〜netmask)&0x7FFFFFFF'时,网络掩码应该是明确的十六进制?执行ip_address&netmask时,ip_address的格式应该是什么? – Genato

+1

@Genato:我假设netmask和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在子网中,但是无效地址,第一个是网络地址,第二个是广播地址。 –

+0

@RichardCritten我知道这一点,不让我们走,我的问题是别的? – Genato