【问题标题】:How to know if an IP address is in local network, xcode如何知道IP地址是否在本地网络中,xcode
【发布时间】:2012-09-24 06:16:02
【问题描述】:

我想知道某个 IP 地址是否在本地网络中,使用我的 Objective-c(Xcode) 程序。但是,问题是对于每个 IP 地址(即使它不在网络中),结果都是成功的。这是代码,请帮助我如何查找 IP 地址是否正确位于本地网络中。

            bool success = false;
            const char *host_name = [@"192.168.0.115" cStringUsingEncoding:NSASCIIStringEncoding];

            SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
                                                                                        host_name);
            SCNetworkReachabilityFlags flags;
            success = SCNetworkReachabilityGetFlags(reachability, &flags);
            bool isAvailable = success && (flags & kSCNetworkFlagsReachable) &&
            !(flags & kSCNetworkFlagsConnectionRequired);
            if (isAvailable)
            {
              //success
              //connect to IP address                      

            }
            else
            {
               //Not success
            }

【问题讨论】:

  • 这不是真正的 ping。 ping 意味着向目标 IP 发送 ICMP 数据包并从中获取回复
  • 但是,我只能用Xcode编写代码。如果您知道答案,请任何人回复
  • @sushma 你找到解决方案了吗?

标签: ios ip-address ping


【解决方案1】:

使用此代码

Reachability* reachability = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain]; // does not work with local IP, ARC is not used.
NetworkStatus netStatus = [reachability currentReachabilityStatus];

netStatus 会给你状态。

更新

Reachability reachabilityWithHostName: 不适用于本地 IP,因为它无法解析地址。因此,此解决方案不能回答问题。但是,正如下面评论中@Kerberos 所引用的,这个ARC-enabled library 可用于检查与本地IP 地址的连接。

【讨论】:

  • 对于这段代码,我无法访问每个 IP 地址,即使它在本地网络中。
  • 那么,你的设备真的可以被IP访问吗?
  • 显然,reachabilityWithHostName 接受主机名的字符串类型,而不是 IP 地址。要 ping ip 地址,您必须使用接受 const struct sockaddr_in 类型的reachabilityWithAddress。
  • @Kerberos 不正确。网络 API 将解析 IP。看到这个答案:stackoverflow.com/a/12178517/188331
  • @ShivanRaptor 你试过那个代码吗?我这样做了,但它不适用于本地 ipv4。如果您有一个有效的案例,我将很乐意纠正答案。我使用 ping 到 ip 解决了这个问题,this 是使用可达性检查使用“reachabilityWithAddress”的连接的一个工作示例,接下来是一个简单的 ping 来检查本地 ip。
猜你喜欢
  • 2012-05-27
  • 2012-01-25
  • 2017-09-02
  • 2013-11-27
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2019-02-03
  • 2015-11-18
相关资源
最近更新 更多