使用 NSHost 访问 IP 地址
我正在尝试使用 NSHost
获取 IP 地址。通过 NSHost 对象,我可以使用地址方法来访问对象数组,其中之一是 IP 地址。但我担心 IP 地址可能会改变阵列中从一台机器到另一台机器的位置。有没有一种方法可以通用地访问这些信息?
在上一篇文章中曾尝试回答这个问题,但正如您所看到的,它没有达到要求。
这是我的代码:
+(NSString *) ipAddress {
NSHost * h = [[[NSHost currentHost] addresses] objectAtIndex:1];
return h ;
}
I am trying to get the IP Address using NSHost
. With the NSHost
object I can use the addresses method to access an array of objects one of which is the IP Address. I fear though that the IP Address may change position in the array from one machine to the other. Is there a way to access this information in a universal way?
There was an attempt to answer this question in a previous post, but as you can see it falls short.
Here is my code:
+(NSString *) ipAddress {
NSHost * h = [[[NSHost currentHost] addresses] objectAtIndex:1];
return h ;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我唯一能想到的就是使用类似“http://www.dyndns .org/cgi-bin/check_ip.cgi”其他人可能有更好的方法。
这是一个示例,(即快速拼凑在一起的代码)
The only thing I can think of is to use something like "http://www.dyndns.org/cgi-bin/check_ip.cgi" others may have a better way.
This is an example,(i.e a quick cobbled together code)
我在很多机器上使用过这个,没有任何问题。
NSString *字符串地址;在其他地方声明
I have used this on many machines without problems.
NSString *stringAddress; is declared else where
我想更新关于获取外部 IP 的原始答案。
没有太多变化,但我想展示如何使用 NSXMLDocument 和 Xquary
这也提供了如何通过获取节点来解析 HTML 的小说明。我认为这更直接。虽然 NSXMLDocument 最初是用于 XML 的,但它会解析 HTML DOM 树
I wanted to update my original answer on getting an external ip.
There is not much change but I wanted to show how to get and parse the HTML with use NSXMLDocument and Xquary
This also gives a small illustration of how you can parse HTML by getting the nodes. Which in my opinion is more straight forward. Although NSXMLDocument is initially for XML it will parse the HTML DOM tree
创建了一个实用程序类来查找 IP 地址。简约的方法。您可以通过更多条件或正则表达式检查来增强它。
返回的列表
这是 NSHost测试方法
IPAddress.h
IPAddress.m
Made an utility class to find the IP addresses. Minimalistic approach. You can robustify it with more conditions or regex checking.
This is the list returned by NSHost
Test method,
IPAddress.h
IPAddress.m
正如您上面提到的问题的答案所说,一台机器可以拥有多种IP地址。如果这就是您想要的,那么您最好使用 NSHost 的 names 方法来获取名称数组,然后您可以过滤后缀(即 *.lan)以获得名称数组您想要使用此名称的主机的名称。就我而言。 .lan 地址以点线四边形形式返回我的网络 IP 地址。
如果你想找到外部IP地址,那么这是一个 很好的答案看看。
As the answers to the question you mention above have said, there are a variety of IP addresses that a single machine can have. If that is what you want, then you might be better off using the
names
method of NSHost to get an array of names, which you can then filter for the suffix (i.e *.lan) to get the name of the host you want with this name. In my case. the .lan address returns my network ip address as a dotted quad.If you want to find the external ip address, then this is a good answer to look at.
我的第一个答案是提供从您的路由器分配给专用网络上的机器的专用 IP 地址。
如果你想查看公网IP,那就是面向互联网的IP。通常由您的服务提供商分配。您可能想看看 Jim Dovey 的答案 --> 这里
我测试了它,效果很好,但请阅读其余的评论和答案,这些评论和答案指出了试图获得公共 IP 时的含糊之处。
My first Answer is to supply the Private IP address assigned to the Machine on private network from say your router.
If you want to see the public IP, which is the one facing the internet. Normally assigned by your service provider. You may want to look at the answer by Jim Dovey --> here
I tested it and it worked well, but read the rest of the comments and answers which point to ambiguities in trying to get a public IP.
您可以在 NSHost 上创建一个类别并执行如下操作:
.h
.m
这工作得非常快而且效果很好。如果您需要其他信息或进行监控,请使用系统配置框架。
You can create a category on NSHost and do something like this:
.h
.m
This works really fast and well. If you need other info or to monitor then use System Configuration framework.