Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift iOS中获取路由器的IP地址_Ios_Swift_Networking_Wifi_Ip Address - Fatal编程技术网

如何在Swift iOS中获取路由器的IP地址

如何在Swift iOS中获取路由器的IP地址,ios,swift,networking,wifi,ip-address,Ios,Swift,Networking,Wifi,Ip Address,我想从我的iPhone中获取已连接路由器的IP地址。我只获取iPhone的IP地址 有什么方法可以获取主机/路由器IP地址吗 顺便说一句,我已经查看了以下链接,但没有解决方案: 我正试图在Swift 5中使用XCode 12.4实现这一点。您可以使用sysctl从路由表中获取默认网关的IP地址,但首先您应该定义所需的结构和常量,因为Darwin.net.route或未向iOS SDK公开: 让RTAX\u网关=1 设RTAX_MAX=8 公共结构rt_度量{ public var rmx_

我想从我的iPhone中获取已连接路由器的IP地址。我只获取iPhone的IP地址

有什么方法可以获取主机/路由器IP地址吗

顺便说一句,我已经查看了以下链接,但没有解决方案:


  • 我正试图在Swift 5中使用XCode 12.4实现这一点。您可以使用
    sysctl
    从路由表中获取默认网关的IP地址,但首先您应该定义所需的结构和常量,因为
    Darwin.net.route
    未向iOS SDK公开:

    让RTAX\u网关=1
    设RTAX_MAX=8
    公共结构rt_度量{
    public var rmx_locks:UInt32/*内核不使用这些值*/
    此路径的公共变量rmx_mtu:UInt32/*mtu*/
    公共变量rmx_跳数:UInt32/*预期最大跳数*/
    公共变量rmx_expire:Int32/*路由的生存期,例如重定向*/
    公共var rmx_recvpipe:UInt32/*入站延迟带宽乘积*/
    公共变量rmx_发送管道:UInt32/*出站延迟带宽乘积*/
    公共变量rmx_ssthresh:UInt32/*出站网关缓冲区限制*/
    公共风险rmx_rtt:UInt32/*预计往返时间*/
    公共风险风险rmx_rttvar:UInt32/*估计rtt方差*/
    public var rmx_pksent:UInt32/*使用此路由发送的数据包*/
    公共变量rmx_状态:UInt32/*路由状态*/
    公共变量rmx_filler:(UInt32、UInt32、UInt32)/*将用于TCP的对等MSS缓存*/
    }
    公共结构rt_msghdr2{
    public var rtm_msglen:u_short/*跳过未理解的消息*/
    公共变量rtm_版本:u_char/*未来二进制兼容性*/
    公共变量rtm_类型:u_char/*消息类型*/
    公共var rtm_索引:关联ifp的u_short/*索引*/
    公共变量rtm_标志:Int32/*标志,包括内核和消息,如完成*/
    public var rtm_addrs:Int32/*位掩码标识msg中的sockaddrs*/
    公共变量rtm_refcnt:Int32/*引用计数*/
    public var rtm_parentflags:父路由的Int32/*标志*/
    公共变量rtm_保留:Int32/*保留字段设置为0*/
    公共变量rtm_use:Int32/*来自rtentry*/
    public var rtm_inits:UInt32/*我们正在初始化哪些度量*/
    公共var rtm_rmx:rt_度量/*度量本身*/
    }
    public func getDefaultGateway()->字符串?{
    变量名称:[Int32]=[
    CTL_NET,
    PF_路线,
    0,
    0,
    净转储2,
    0
    ]
    让nameSize=u_int(name.count)
    var bufferSize=0
    sysctl(&name,nameSize,nil,&bufferSize,nil,0)
    let buffer=unsafemeutablepointer.allocate(容量:bufferSize)
    延迟{buffer.deallocate()}
    初始化(重复:0,计数:bufferSize)
    guard sysctl(&name,nameSize,buffer,&bufferSize,nil,0)==0 else{return nil}
    //路线
    var rt=缓冲区
    let end=rt.advanced(by:bufferSize)
    而rt对于0中的i..您需要调用外部api get public和routerip@Anbu.Karthik,你能解释一下我应该调用哪个外部API吗?我需要单独创建它们吗?你应该检查一下,如果网关为0.0.0.0,我们可以在iOS中获取连接的接入点的IP地址吗?我们尝试了此代码,我们正在获取连接的Ac的网关IP地址接入点,在我的例子中是0.0.0.0。但是我们想要连接的接入点的IP地址,而不是它的网关IP。你能帮忙吗?我怎样才能获得dhcp服务器iOS Swift的IP地址?@Akshada Systemaix我的例子展示了你如何访问你的路由表并获得关于默认网关的信息。路由表中有这样的路由的主机、子网和默认值,您可以通过分析其标志从列表中获取所需的路由。FreeBSD网关和路由-