0

我正在尝试 ping 我网络上的所有 IP 地址。我现在可以获取我的 ip,我正在尝试 ping 我网络中的所有其他 ip。我有这个 ip xxx.xxx.xxx.121 ,我必须将 xxx.xxx.xxx.1 ping 到 xxx.xxx.xxx.255。顺便说一下,我正在使用 simpleping。

for (int i = 0; i<256; i++) {
        NSString *str = [NSString stringWithFormat:@"%@.%i",searchingIp,i];
        NSLog(@"ipStr:%@",str);

        const char *address = [str UTF8String];
        NSLog(@"%s",address);

        struct sockaddr_in callAddress;
        callAddress.sin_len = sizeof(callAddress);
        callAddress.sin_family = AF_INET;
        callAddress.sin_port = htons(49160);
        callAddress.sin_addr.s_addr = inet_addr(address);

        NSLog(@"%s:%d",inet_ntoa(((struct sockaddr_in*)&callAddress)->sin_addr),((struct sockaddr_in*)&callAddress)->sin_port);


        simplePing = [SimplePing simplePingWithHostAddress:[NSData dataWithBytes:&callAddress length:sizeof(callAddress)]];
        simplePing.delegate = self;
        [simplePing start];
    }

我还尝试使用“49160”设置端口,但它仍然显示 2240。我在这种类型的东西中有点新。

4

1 回答 1

0

您说您正在使用 Apple 编写的 SimplePing 示例(https://developer.apple.com/library/mac/samplecode/SimplePing/Introduction/Intro.html

然后,我认为有一种方法可以让您使用主机名对其进行初始化:

+ (SimplePing *)simplePingWithHostName:(NSString *)hostName

然后应该更容易编写如下内容:

for (int i = 0; i<256; i++) {
        NSString *str = [NSString stringWithFormat:@"%@.%i",searchingIp,i];
        NSLog(@"ipStr:%@",str);

        simplePing = [SimplePing simplePingWithHostName:str];
        simplePing.delegate = self;
        [simplePing start];
    }

顺便说一句,ICMP 不是 TCP/UDP,所以我不认为它有端口抽象,而是像回显这样的消息类型。

于 2013-10-10T04:33:28.243 回答