我在我的swift项目中导入了一个Obj-C文件,Xcode自动提示我按预期创建一个桥接头文件.但是,我删除了两个文件(移动到垃圾箱)进行了一些更改,但是当我再次尝试导入Obj-C文件时,提示不再出现.是什么原因?我甚至在另一个项目中测试了这个相同的场景,似乎一旦我删除了Xcode的自动创建的桥接头,它不会再次带来提示.为什么是这样?
我使用Mongoose在iphone中启动并运行了一个Web服务器.但问题是如何让我的iphone/ipad的IP地址让用户知道他们可以访问服务器的位置.我发现[NSHost addresses]可以完成这项工作,但我正在开发app app,这是一种无证的方法.
我如何获得我的本地IpAddress?
我试着用这个Obj C例子:如何以编程方式获取iphone的ip地址
当我进入该功能时,getifaddrs()我无法进一步.我无法使用该功能.
有没有其他方法可以做到这一点,或者我是以错误的方式接近这个?
我使用以下代码打印所有接口及其mac地址
- ( void )interfaceInfo{
int mib[6];
size_t len;
char *buf;
unsigned char *ptr;
struct if_msghdr *ifm;
struct sockaddr_dl *sdl;
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_LINK;
mib[4] = NET_RT_IFLIST;
char name[128];
memset(name, 0, sizeof(name));
for (int i=1; i<20; i ++) {
if (if_indextoname(i, name)) {
printf("%s ",name);
}else{
continue;
}
if ((mib[5] = if_nametoindex(name)) == 0) {
printf("Error: if_nametoindex error\n");
return NULL;
}
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
printf("Error: …Run Code Online (Sandbox Code Playgroud) 我试图了解我的活动网络接口IP版本是什么 - IPv4或IPv6.我正在使用下一个说明http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/来测试我的应用程序的IPv6兼容性.
我检查了这里可用的所有资源(例如Swift - 获取设备的IP地址,如何以编程方式获取iphone的ip地址,究竟是什么意思是iOS网络接口名称?什么是pdp_ip?什么是ap?),它有助于获得可用接口列表.当我的iPhone连接到IPv4 WiFi网络时,列表是下一个:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "192.168.1.190";
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
Run Code Online (Sandbox Code Playgroud)
当它连接到IPv6 WiFi网络时,列表是下一个:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "169.254.127.94";
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都有en0/ipv4和en0/ipv6,所以我不清楚如何以编程方式决定我的网络的ip版本实际上是什么.
非常感谢任何帮助.提前致谢.
对于我的项目,我需要获取IPhone的公共IP地址,有很多可用的示例,它们通过使用外部/第三方URL显示公共IP地址.我只想知道如何在没有使用其他网址的情况下提取IPhones的IP地址.
注意: - 我使用过这个,但只显示本地IP地址,我需要公共IP地址
func getIPAddress() -> [String] {
var addresses = [String]()
// Get list of all interfaces on the local machine:
var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
if getifaddrs(&ifaddr) == 0 {
// For each interface ...
for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) {
let flags = Int32(ptr.memory.ifa_flags)
var addr = ptr.memory.ifa_addr.memory
// Check for running IPv4, IPv6 interfaces. Skip the loopback interface.
if (flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING) {
if addr.sa_family == …Run Code Online (Sandbox Code Playgroud) 我的需求就像,我想要连接到我的iOS设备的热点的设备的IP和MAC地址。如何获得这些设备的IP地址列表?苹果是否允许通过代码获取与热点相关的信息?
如标题所述,我具有要使用指定的DNS服务器解析的主机名(例如www.example.com)。例如,在一种情况下,我想使用Google的IPv4 DNS,在另一种情况下,则要使用Google的IPv6 DNS。
我在iOS上浏览了SO,找到了类似的问题(Swift-获取设备的IP地址),所以我确定可以做到,但是我不清楚如何做?
我怎样才能做到这一点?
编辑2018年6月7日
@mdeora从http://www.software7.com/blog/programmatically-query-specific-dns-servers-on-ios/提出的建议解决方案
此解决方案有效,但仅当我使用IPv4 DNS(例如Google的“ 8.8.8.8”)时才有效。如果我尝试使用IPv6 DNS 2001:4860:4860 :: 8888,我什么也收不到。
我设法更改了转换:
void setup_dns_server(res_state res, const char *dns_server)
{
res_ninit(res);
struct in_addr addr;
// int returnValue = inet_aton(dns_server, &addr);
inet_pton(AF_INET6, dns_server, &addr); // for IPv6 conversion
res->nsaddr_list[0].sin_addr = addr;
res->nsaddr_list[0].sin_family = AF_INET;
res->nsaddr_list[0].sin_port = htons(NS_DEFAULTPORT);
res->nscount = 1;
};
Run Code Online (Sandbox Code Playgroud)
但是仍然有麻烦:
void query_ip(res_state res, const char *host, char ip[])
{
u_char answer[NS_PACKETSZ];//NS_IN6ADDRSZ NS_PACKETSZ
int len = res_nquery(res, host, ns_c_in, ns_t_a, answer, sizeof(answer));
ns_msg handle; …Run Code Online (Sandbox Code Playgroud) 我有以下代码成功检索连接到我的路由器的所有IP.但我需要为每个IP获取MAC地址.
因此,不是将地址作为数组[ips]返回,而是作为字典返回[ips:0000000, mac: 000000]
是否可以通过更改以下代码来实现(来自如何在swift中获取IP地址)?
func getIFAddresses() -> [String] {
print("GET IF ADDRESSSE")
var addresses = [String]()
// Get list of all interfaces on the local machine:
var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
if getifaddrs(&ifaddr) == 0 {
print("getifaddrs\(getifaddrs)")
// For each interface ...
for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) {
let flags = Int32(ptr.memory.ifa_flags)
var addr = ptr.memory.ifa_addr.memory
print("flags\(flags)")
print("addr\(addr)")
// Check for running IPv4, IPv6 interfaces. Skip the …Run Code Online (Sandbox Code Playgroud) ios ×7
swift ×5
iphone ×4
mac-address ×4
objective-c ×4
ip-address ×2
networking ×2
dns ×1
ip ×1
ipad ×1
ipv4 ×1
ipv6 ×1
macos ×1
swift2 ×1
swift2.1 ×1
xcode ×1