我想从Swift中的DNS查询中获取IP地址(例如192.168.0.1或87.12.56.50)。我用100种不同的方法尝试了100次…没有任何帮助,所以我必须寻求帮助。到目前为止,这是我的代码:
let host = CFHostCreateWithName(nil,"subdomain.of.stackoverflow.com").takeUnretainedValue();
CFHostStartInfoResolution(host, .Addresses, nil);
var success: Boolean = 0;
let addresses = CFHostGetAddressing(host, &success).takeUnretainedValue() as NSArray;
if(addresses.count > 0){
let theAddress = addresses[0] as NSData;
println(theAddress);
}
您的代码将地址检索为“套接字地址”结构。
getnameinfo()
可用于将地址转换为数字IP字符串回收的代码,现已更新为Swift 2 ):
let host = CFHostCreateWithName(nil,"www.google.com").takeRetainedValue()
CFHostStartInfoResolution(host, .Addresses, nil)
var success: DarwinBoolean = false
if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray?,
let theAddress = addresses.firstObject as? NSData {
var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
if getnameinfo(UnsafePointer(theAddress.bytes), socklen_t(theAddress.length),
&hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
if let numAddress = String.fromCString(hostname) {
print(numAddress)
}
}
}
输出(示例): 173.194.112.147
还要注意takeRetainedValue()
第一行的用法,因为名称中 CFHostCreateWithName()
带有“
Create”,因此返回一个(+1)保留的对象。
Swift 3 / Xcode 8更新:
let host = CFHostCreateWithName(nil,"www.google.com" as CFString).takeRetainedValue()
CFHostStartInfoResolution(host, .addresses, nil)
var success: DarwinBoolean = false
if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray?,
let theAddress = addresses.firstObject as? NSData {
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
if getnameinfo(theAddress.bytes.assumingMemoryBound(to: sockaddr.self), socklen_t(theAddress.length),
&hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
let numAddress = String(cString: hostname)
print(numAddress)
}
}
或者,要获取主机的 所有 IP地址:
let host = CFHostCreateWithName(nil,"www.google.com" as CFString).takeRetainedValue()
CFHostStartInfoResolution(host, .addresses, nil)
var success: DarwinBoolean = false
if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray? {
for case let theAddress as NSData in addresses {
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
if getnameinfo(theAddress.bytes.assumingMemoryBound(to: sockaddr.self), socklen_t(theAddress.length),
&hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
let numAddress = String(cString: hostname)
print(numAddress)
}
}
}
但是,这给了我127.0.1.1的IP地址。当我使用时,我得到以下信息 首先,我不知道127.0.1.1是从哪里来的,但不管怎样,这都不是我想要的。当我谷歌的时候,我总是看到相同的语法,Bash脚本或netifaces,我试图使用标准库。 那么如何在Python中获取eth0的IP地址呢?
问题内容: 我在mod_wsgi / Apache上安装了flask应用程序,需要记录用户的IP地址。request.remote_addr返回“ 127.0.0.1”,此修复程序试图更正此错误,但是我发现Django出于安全原因删除了类似的代码。 有没有更好的方法来安全地获取用户的真实IP地址? 编辑:也许我缺少明显的东西。我应用了werkzeug / Flask的修复程序, 但是当我尝试更改标
问题内容: 我想获取计算机的IP地址。我使用了下面的代码,但是返回了。 我想获取IP地址(例如),而不是回送地址。 问题答案: 您需要遍历所有网络接口 播放(取自util / helper.go)
问题内容: 我不是指 127.0.0.1 而是其他计算机将用来访问该计算机的计算机,例如 192.168.1.6 问题答案: http://nodejs.org/api/os.html#os_os_networkinterfaces
问题内容: 我正在使用以下PHP代码获取访问者的IP地址: 但是, 当 访客 使用Proxy时 ,我无法从访客那里获得真实的IP地址。在这种情况下,是否可以获取访客的IP地址? 问题答案: 试试这个PHP代码。
demo import java.io.IOException; import java.net.*; /** * 查找IP地址 */ public class TestFindDNS { public static void main(String[] args) throws IOException { // String href = "http://